diff options
author | Jardel Weyrich <jweyrich@users.sourceforge.net> | 2009-12-28 16:00:05 -0500 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2009-12-28 16:00:05 -0500 |
commit | 4c8b7cdc64d054e18be3bd6e3f85d277927c639c (patch) | |
tree | 64cd40968f571e8dcd1e5fe57062db50ba373163 /evutil.c | |
parent | fee2c77919196b59cc5a50bc532b048844972784 (diff) | |
download | libevent-4c8b7cdc64d054e18be3bd6e3f85d277927c639c.tar.gz |
Make evutil_make_socket_nonblocking() leave any other flags alone.
Fixes bug 2922121
Diffstat (limited to 'evutil.c')
-rw-r--r-- | evutil.c | 13 |
1 files changed, 10 insertions, 3 deletions
@@ -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; |