]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/simple: close the socket fd while failed 10371/head
authorYan Jun <yan.jun8@zte.com.cn>
Wed, 20 Jul 2016 02:41:44 +0000 (10:41 +0800)
committerYan Jun <yan.jun8@zte.com.cn>
Wed, 20 Jul 2016 02:53:07 +0000 (10:53 +0800)
Maybe we should close socket file descriptor while bind/listen
failed, avoid consuming too many socket fds.

Signed-off-by: Yan Jun <yan.jun8@zte.com.cn>
src/msg/simple/Accepter.cc

index bce854120b6e98a537c43dde9341974903c3788f..4819731c43cbf17a726fa8dc729fd04c13184df4 100644 (file)
@@ -147,7 +147,10 @@ int Accepter::bind(const entity_addr_t &bind_addr, const set<int>& avoid_ports)
 
   // It seems that binding completely failed, return with that exit status
   if (rc < 0) {
-      lderr(msgr->cct) << "accepter.bind was unable to bind after " << conf->ms_bind_retry_count << " attempts: " << cpp_strerror(errno) << dendl;
+      lderr(msgr->cct) << "accepter.bind was unable to bind after " << conf->ms_bind_retry_count
+                       << " attempts: " << cpp_strerror(errno) << dendl;
+      ::close(listen_sd);
+      listen_sd = -1;
       return r;
   }
 
@@ -158,6 +161,8 @@ int Accepter::bind(const entity_addr_t &bind_addr, const set<int>& avoid_ports)
   if (rc < 0) {
     rc = -errno;
     lderr(msgr->cct) << "accepter.bind failed getsockname: " << cpp_strerror(rc) << dendl;
+    ::close(listen_sd);
+    listen_sd = -1;
     return rc;
   }
   listen_addr.set_sockaddr((sockaddr*)&ss);
@@ -167,7 +172,10 @@ int Accepter::bind(const entity_addr_t &bind_addr, const set<int>& avoid_ports)
     rc = ::setsockopt(listen_sd, SOL_SOCKET, SO_RCVBUF, (void*)&size, sizeof(size));
     if (rc < 0)  {
       rc = -errno;
-      lderr(msgr->cct) << "accepter.bind failed to set SO_RCVBUF to " << size << ": " << cpp_strerror(rc) << dendl;
+      lderr(msgr->cct) << "accepter.bind failed to set SO_RCVBUF to " << size
+                       << ": " << cpp_strerror(rc) << dendl;
+      ::close(listen_sd);
+      listen_sd = -1;
       return rc;
     }
   }
@@ -179,7 +187,9 @@ int Accepter::bind(const entity_addr_t &bind_addr, const set<int>& avoid_ports)
   if (rc < 0) {
     rc = -errno;
     lderr(msgr->cct) << "accepter.bind unable to listen on " << listen_addr
-                    << ": " << cpp_strerror(rc) << dendl;
+                    << ": " << cpp_strerror(rc) << dendl;
+    ::close(listen_sd);
+    listen_sd = -1;
     return rc;
   }