From: Yan Jun Date: Wed, 20 Jul 2016 02:41:44 +0000 (+0800) Subject: msg/simple: close the socket fd while failed X-Git-Tag: v11.0.1~121^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ed8f69640bcc4dadc3f7dbe9d0162b5c143da720;p=ceph.git msg/simple: close the socket fd while failed Maybe we should close socket file descriptor while bind/listen failed, avoid consuming too many socket fds. Signed-off-by: Yan Jun --- diff --git a/src/msg/simple/Accepter.cc b/src/msg/simple/Accepter.cc index bce854120b6e..4819731c43cb 100644 --- a/src/msg/simple/Accepter.cc +++ b/src/msg/simple/Accepter.cc @@ -147,7 +147,10 @@ int Accepter::bind(const entity_addr_t &bind_addr, const set& 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& 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& 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& 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; }