From ecfc720a4f7666d468413a3b9b29908bff5ddb82 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Mon, 9 Jan 2012 11:49:41 -0500 Subject: [PATCH] Make evconnlistener work around bug in older Linux when getting nmapped Older Linuxes sometimes respond to some nmap probes by having accept() return a success but with socklen 0. That can lead to confusing behavior when you go to process the sockaddr. --- listener.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/listener.c b/listener.c index a440f465..8dcbb0b3 100644 --- a/listener.c +++ b/listener.c @@ -390,6 +390,12 @@ listener_read_cb(evutil_socket_t fd, short what, void *p) evutil_socket_t new_fd = accept(fd, (struct sockaddr*)&ss, &socklen); if (new_fd < 0) break; + if (socklen == 0) { + /* This can happen with some older linux kernels in + * response to nmap. */ + evutil_closesocket(new_fd); + continue; + } if (!(lev->flags & LEV_OPT_LEAVE_SOCKETS_BLOCKING)) evutil_make_socket_nonblocking(new_fd); -- 2.40.0