From fcd4d7ff7833365dd84faa8cde7078e5c1f3fca1 Mon Sep 17 00:00:00 2001 From: meep-eep Date: Fri, 15 Dec 2006 00:27:21 +0000 Subject: [PATCH] Using fcntl() with F_SETF to set non-blocking mode, instead of ioctl() with FIONBIO. This is the POSIX way. git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@2601 8092fc87-c524-0410-9efc-e669fe64eaf9 --- .../sc2code/libs/network/socket/socket_bsd.c | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/sc2/src/sc2code/libs/network/socket/socket_bsd.c b/sc2/src/sc2code/libs/network/socket/socket_bsd.c index b39a98fa0..070303eb0 100644 --- a/sc2/src/sc2code/libs/network/socket/socket_bsd.c +++ b/sc2/src/sc2code/libs/network/socket/socket_bsd.c @@ -29,7 +29,6 @@ #include #include #include -#include #include #if defined(__FreeBSD__) || defined(__OpenBSD__) # include @@ -38,6 +37,7 @@ #include #include #include +#include Socket * @@ -136,15 +136,25 @@ Socket_recv(Socket *sock, void *buf, size_t len, int flags) { int Socket_setNonBlocking(Socket *sock) { - int flag = 1; + int flags; - if (ioctl(sock->fd, FIONBIO, &flag) == -1) { + flags = fcntl(sock->fd, F_GETFL); + if (flags == -1) { int savedErrno = errno; - log_add(log_Error, "Setting non-block mode on socket failed: %s.\n", - strerror(errno)); + log_add(log_Error, "Getting file descriptor flags of socket failed: " + "%s.\n", strerror(errno)); errno = savedErrno; return -1; } + + if (fcntl(sock->fd, F_SETFL, (long) (flags | O_NONBLOCK)) == -1) { + int savedErrno = errno; + log_add(log_Error, "Setting non-blocking mode on socket failed: " + "%s.\n", strerror(errno)); + errno = savedErrno; + return -1; + } + return 0; }