# HG changeset patch # User Timo Sirainen # Date 1127646744 -10800 # Node ID 3ae2df67459ceebe20d06c52c2663039d9535cbe # Parent 3360cc0197372cda124eee71cc74d270d1aea8e1 Added fd_set_nonblock() and changed net_set_nonblock() to use it. diff -r 3360cc019737 -r 3ae2df67459c src/lib/Makefile.am --- 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 \ diff -r 3360cc019737 -r 3ae2df67459c src/lib/fd-set-nonblock.c --- /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 + +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; +} diff -r 3360cc019737 -r 3ae2df67459c src/lib/fd-set-nonblock.h --- /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 diff -r 3360cc019737 -r 3ae2df67459c src/lib/ioloop-notify-dn.c --- 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 @@ -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); diff -r 3360cc019737 -r 3ae2df67459c src/lib/network.c --- 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 @@ -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__)