From 4c8b7cdc64d054e18be3bd6e3f85d277927c639c Mon Sep 17 00:00:00 2001 From: Jardel Weyrich Date: Mon, 28 Dec 2009 16:00:05 -0500 Subject: [PATCH] Make evutil_make_socket_nonblocking() leave any other flags alone. Fixes bug 2922121 --- evutil.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/evutil.c b/evutil.c index f1480db5..381e17fa 100644 --- a/evutil.c +++ b/evutil.c @@ -184,9 +184,16 @@ evutil_make_socket_nonblocking(evutil_socket_t fd) ioctlsocket(fd, FIONBIO, (unsigned long*) &nonblocking); } #else - if (fcntl(fd, F_SETFL, O_NONBLOCK) == -1) { - event_warn("fcntl(O_NONBLOCK)"); - return -1; + { + long flags; + if ((flags = fcntl(fd, F_GETFL, NULL)) < 0) { + event_warn("fcntl(F_GETFL)"); + return -1; + } + if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) < 0) { + event_warn("fcntl(O_NONBLOCK)"); + return -1; + } } #endif return 0;