diff --git a/event.c b/event.c index c64a66de..575f8f52 100644 --- a/event.c +++ b/event.c @@ -1127,7 +1127,7 @@ event_signal_closure(struct event_base *base, struct event *ev) ev->ev_ncalls = ncalls; if (ncalls == 0) ev->ev_pncalls = NULL; - (*ev->ev_callback)((int)ev->ev_fd, ev->ev_res, ev->ev_arg); + (*ev->ev_callback)(ev->ev_fd, ev->ev_res, ev->ev_arg); EVBASE_ACQUIRE_LOCK(base, th_base_lock); should_break = base->event_break; @@ -1358,7 +1358,7 @@ event_persist_closure(struct event_base *base, struct event *ev) event_add_internal(ev, &run_at, 1); } EVBASE_RELEASE_LOCK(base, th_base_lock); - (*ev->ev_callback)((int)ev->ev_fd, ev->ev_res, ev->ev_arg); + (*ev->ev_callback)(ev->ev_fd, ev->ev_res, ev->ev_arg); } /* @@ -1409,7 +1409,7 @@ event_process_active_single_queue(struct event_base *base, case EV_CLOSURE_NONE: EVBASE_RELEASE_LOCK(base, th_base_lock); (*ev->ev_callback)( - (int)ev->ev_fd, ev->ev_res, ev->ev_arg); + ev->ev_fd, ev->ev_res, ev->ev_arg); break; } diff --git a/listener.c b/listener.c index 388b3327..9b68cc0d 100644 --- a/listener.c +++ b/listener.c @@ -392,6 +392,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);