Mercurial > dovecot > core-2.2
diff src/lib/network.c @ 1871:638944ab7753 HEAD
net_set_nonblock(): don't replace flags in fd, change the existing ones
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 09 Nov 2003 22:20:36 +0200 |
parents | 9df02b1533b3 |
children | 79790750c349 |
line wrap: on
line diff
--- a/src/lib/network.c Sun Nov 09 20:26:25 2003 +0200 +++ b/src/lib/network.c Sun Nov 09 22:20:36 2003 +0200 @@ -194,7 +194,18 @@ void net_set_nonblock(int fd __attr_unused__, int nonblock __attr_unused__) { #ifdef HAVE_FCNTL - if (fcntl(fd, F_SETFL, nonblock ? O_NONBLOCK : 0) < 0) + int flags; + + flags = fcntl(fd, F_GETFL, 0); + if (flags == -1) + i_fatal("net_set_nonblock() failed: %m"); + + if (nonblock) + flags |= O_NONBLOCK; + else + flags &= ~O_NONBLOCK; + + if (fcntl(fd, F_SETFL, flags) < 0) i_fatal("net_set_nonblock() failed: %m"); #endif }