changeset 3621:3ae2df67459c HEAD

Added fd_set_nonblock() and changed net_set_nonblock() to use it.
author Timo Sirainen <tss@iki.fi>
date Sun, 25 Sep 2005 14:12:24 +0300
parents 3360cc019737
children b402cc8a5d44
files src/lib/Makefile.am src/lib/fd-set-nonblock.c src/lib/fd-set-nonblock.h src/lib/ioloop-notify-dn.c src/lib/network.c
diffstat 5 files changed, 45 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/Makefile.am	Sun Sep 25 14:07:32 2005 +0300
+++ b/src/lib/Makefile.am	Sun Sep 25 14:12:24 2005 +0300
@@ -8,6 +8,7 @@
 	env-util.c \
 	failures.c \
 	fd-close-on-exec.c \
+	fd-set-nonblock.c \
 	fdpass.c \
 	file-cache.c \
 	file-dotlock.c \
@@ -83,6 +84,7 @@
 	env-util.h \
 	failures.h \
 	fd-close-on-exec.h \
+	fd-set-nonblock.h \
 	fdpass.h \
 	file-cache.h \
 	file-dotlock.h \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/lib/fd-set-nonblock.c	Sun Sep 25 14:12:24 2005 +0300
@@ -0,0 +1,28 @@
+/* Copyright (c) 1999-2005 Timo Sirainen */
+
+#include "lib.h"
+#include "fd-set-nonblock.h"
+
+#include <fcntl.h>
+
+int fd_set_nonblock(int fd, int nonblock)
+{
+	int flags;
+
+	flags = fcntl(fd, F_GETFL, 0);
+	if (flags < 0) {
+		i_error("fcntl(%d, F_GETFL) failed: %m", fd);
+		return -1;
+	}
+
+	if (nonblock)
+		flags |= O_NONBLOCK;
+	else
+		flags &= ~O_NONBLOCK;
+
+	if (fcntl(fd, F_SETFL, flags) < 0) {
+		i_error("fcntl(%d, F_SETFL) failed: %m", fd);
+		return -1;
+	}
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/lib/fd-set-nonblock.h	Sun Sep 25 14:12:24 2005 +0300
@@ -0,0 +1,7 @@
+#ifndef __FD_SET_NONBLOCK_H
+#define __FD_SET_NONBLOCK_H
+
+/* Set file descriptor to blocking/nonblocking state */
+int fd_set_nonblock(int fd, int nonblock);
+
+#endif
--- a/src/lib/ioloop-notify-dn.c	Sun Sep 25 14:07:32 2005 +0300
+++ b/src/lib/ioloop-notify-dn.c	Sun Sep 25 14:12:24 2005 +0300
@@ -8,7 +8,7 @@
 #ifdef IOLOOP_NOTIFY_DNOTIFY
 
 #include "ioloop-internal.h"
-#include "network.h"
+#include "fd-set-nonblock.h"
 #include "fd-close-on-exec.h"
 
 #include <signal.h>
@@ -154,8 +154,8 @@
 		return;
 	}
 
-	net_set_nonblock(event_pipe[0], TRUE);
-	net_set_nonblock(event_pipe[1], TRUE);
+	fd_set_nonblock(event_pipe[0], TRUE);
+	fd_set_nonblock(event_pipe[1], TRUE);
 
 	fd_close_on_exec(event_pipe[0], TRUE);
 	fd_close_on_exec(event_pipe[1], TRUE);
--- a/src/lib/network.c	Sun Sep 25 14:07:32 2005 +0300
+++ b/src/lib/network.c	Sun Sep 25 14:12:24 2005 +0300
@@ -1,6 +1,7 @@
-/* Copyright (c) 1999-2003 Timo Sirainen */
+/* Copyright (c) 1999-2005 Timo Sirainen */
 
 #include "lib.h"
+#include "fd-set-nonblock.h"
 #include "network.h"
 
 #include <unistd.h>
@@ -203,23 +204,10 @@
 }
 
 /* Set socket blocking/nonblocking */
-void net_set_nonblock(int fd __attr_unused__, int nonblock __attr_unused__)
+void net_set_nonblock(int fd, int nonblock)
 {
-#ifdef HAVE_FCNTL
-	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
+	if (fd_set_nonblock(fd, nonblock) < 0)
+		i_fatal("fd_set_nonblock(%d) failed: %m", fd);
 }
 
 int net_set_cork(int fd __attr_unused__, int cork __attr_unused__)