From 81c26ba43b85989d04ff35222f80e7c14ac6dbeb 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 | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/evutil.c b/evutil.c index 564377d7..561eff86 100644 --- a/evutil.c +++ b/evutil.c @@ -168,10 +168,17 @@ evutil_make_socket_nonblocking(int 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; }