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);
}
#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;