From f97d0d2ccb9347a6252909975e5a81668f3bd406 Mon Sep 17 00:00:00 2001 From: Haomai Wang Date: Fri, 17 Jun 2016 21:55:03 +0800 Subject: [PATCH] msg/async: Consolidate accept error handle 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 --- src/msg/async/AsyncMessenger.cc | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/msg/async/AsyncMessenger.cc b/src/msg/async/AsyncMessenger.cc index 52e71e0e18e44..c2c9d7081779a 100644 --- a/src/msg/async/AsyncMessenger.cc +++ b/src/msg/async/AsyncMessenger.cc @@ -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; } } } -- 2.39.5