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
 }