summaryrefslogtreecommitdiff
path: root/evutil.c
diff options
context:
space:
mode:
authorJardel Weyrich <jweyrich@users.sourceforge.net>2009-12-28 16:00:05 -0500
committerNick Mathewson <nickm@torproject.org>2009-12-28 16:00:05 -0500
commit4c8b7cdc64d054e18be3bd6e3f85d277927c639c (patch)
tree64cd40968f571e8dcd1e5fe57062db50ba373163 /evutil.c
parentfee2c77919196b59cc5a50bc532b048844972784 (diff)
downloadlibevent-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.c13
1 files 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;