Make evutil_make_socket_nonblocking() leave any other flags alone.

Fixes bug 2922121
This commit is contained in:
Jardel Weyrich 2009-12-28 16:00:05 -05:00 committed by Nick Mathewson
parent fee2c77919
commit 4c8b7cdc64

View File

@ -184,9 +184,16 @@ evutil_make_socket_nonblocking(evutil_socket_t fd)
ioctlsocket(fd, FIONBIO, (unsigned long*) &nonblocking); ioctlsocket(fd, FIONBIO, (unsigned long*) &nonblocking);
} }
#else #else
if (fcntl(fd, F_SETFL, O_NONBLOCK) == -1) { {
event_warn("fcntl(O_NONBLOCK)"); long flags;
return -1; 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 #endif
return 0; return 0;