]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/async: Consolidate accept error handle
authorHaomai Wang <haomai@xsky.com>
Fri, 17 Jun 2016 13:55:03 +0000 (21:55 +0800)
committerHaomai Wang <haomai@xsky.com>
Tue, 28 Jun 2016 14:29:59 +0000 (22:29 +0800)
The original logic is from
https://github.com/ceph/ceph/commit/ba140b5a6d1bafe7f953819f682758ab552edfd4
I think it doesn't make sense in detail errno case.

Signed-off-by: Haomai Wang <haomai@xsky.com>
src/msg/async/AsyncMessenger.cc

index 52e71e0e18e444d58c0751cec3e69e45e60f2399..c2c9d7081779a12e3c020edb25c38aa61e681774 100644 (file)
@@ -277,13 +277,11 @@ int Processor::start(Worker *w)
 void Processor::accept()
 {
   ldout(msgr->cct, 10) << __func__ << " listen_sd=" << listen_sd << dendl;
-  int errors = 0;
-  while (errors < 4) {
+  while (true) {
     sockaddr_storage ss;
     socklen_t slen = sizeof(ss);
     int sd = ::accept(listen_sd, (sockaddr*)&ss, &slen);
     if (sd >= 0) {
-      errors = 0;
       ldout(msgr->cct, 10) << __func__ << " accepted incoming on sd " << sd << dendl;
 
       msgr->add_accept(sd);
@@ -293,10 +291,18 @@ void Processor::accept()
         continue;
       } else if (errno == EAGAIN) {
         break;
+      } else if (errno == EMFILE || errno == ENFILE) {
+        lderr(msgr->cct) << __func__ << " open file descriptions limit reached sd = " << sd
+                         << " errno " << errno << " " << cpp_strerror(errno) << dendl;
+        break;
+      } else if (errno == ECONNABORTED) {
+        ldout(msgr->cct, 0) << __func__ << " it was closed because of rst arrived sd = " << sd
+                            << " errno " << errno << " " << cpp_strerror(errno) << dendl;
+        continue;
       } else {
-        errors++;
-        ldout(msgr->cct, 20) << __func__ << " no incoming connection?  sd = " << sd
-                             << " errno " << errno << " " << cpp_strerror(errno) << dendl;
+        lderr(msgr->cct) << __func__ << " no incoming connection?  sd = " << sd
+                         << " errno " << errno << " " << cpp_strerror(errno) << dendl;
+        break;
       }
     }
   }