diff --git a/src/api/InkAPITest.cc b/src/api/InkAPITest.cc index 872bc49ebd2..eac60ccd3fc 100644 --- a/src/api/InkAPITest.cc +++ b/src/api/InkAPITest.cc @@ -893,8 +893,13 @@ static int synserver_vc_refuse(TSCont contp, TSEvent event, void *data) { if (event != TS_EVENT_NET_ACCEPT && event != TS_EVENT_NET_ACCEPT_FAILED) { - // net_accept() passes negated errno as data on EVENT_ERROR; Linux MAX_ERRNO is 4095 intptr_t data_val = reinterpret_cast(data); + // Listening socket closed by synserver_stop while accept was pending. + if (event == TS_EVENT_ERROR && data_val == -EBADF) { + Dbg(dbg_ctl_SockServer, "synserver_vc_refuse: accept got EBADF, listener likely shut down"); + return TS_EVENT_IMMEDIATE; + } + // net_accept() passes negated errno as data on EVENT_ERROR; Linux MAX_ERRNO is 4095 if (data_val < 0 && data_val >= -4095) { int err = static_cast(-data_val); ink_abort("synserver_vc_refuse: unexpected event %d, accept errno: %s (%d)", event, strerror(err), err); @@ -923,8 +928,13 @@ static int synserver_vc_accept(TSCont contp, TSEvent event, void *data) { if (event != TS_EVENT_NET_ACCEPT && event != TS_EVENT_NET_ACCEPT_FAILED) { - // net_accept() passes negated errno as data on EVENT_ERROR; Linux MAX_ERRNO is 4095 intptr_t data_val = reinterpret_cast(data); + // Listening socket closed by synserver_stop while accept was pending. + if (event == TS_EVENT_ERROR && data_val == -EBADF) { + Dbg(dbg_ctl_SockServer, "synserver_vc_accept: accept got EBADF, listener likely shut down"); + return TS_EVENT_IMMEDIATE; + } + // net_accept() passes negated errno as data on EVENT_ERROR; Linux MAX_ERRNO is 4095 if (data_val < 0 && data_val >= -4095) { int err = static_cast(-data_val); ink_abort("synserver_vc_accept: unexpected event %d, accept errno: %s (%d)", event, strerror(err), err);