aboutsummaryrefslogtreecommitdiff
path: root/src/os/unix
diff options
context:
space:
mode:
Diffstat (limited to 'src/os/unix')
-rw-r--r--src/os/unix/ngx_socket.c2
-rw-r--r--src/os/unix/ngx_socket.h5
2 files changed, 5 insertions, 2 deletions
diff --git a/src/os/unix/ngx_socket.c b/src/os/unix/ngx_socket.c
index 60885ddd5..a93679f64 100644
--- a/src/os/unix/ngx_socket.c
+++ b/src/os/unix/ngx_socket.c
@@ -10,7 +10,7 @@
/*
* ioctl(FIONBIO) sets a blocking mode with the single syscall
- * while fcntl(F_SETFL, ~O_NONBLOCK) needs to learn before
+ * while fcntl(F_SETFL, !O_NONBLOCK) needs to learn before
* the previous state using fcntl(F_GETFL).
*
* ioctl() and fcntl() are syscalls at least in FreeBSD 2.x, Linux 2.2
diff --git a/src/os/unix/ngx_socket.h b/src/os/unix/ngx_socket.h
index b381967e6..9e6a859bb 100644
--- a/src/os/unix/ngx_socket.h
+++ b/src/os/unix/ngx_socket.h
@@ -29,9 +29,12 @@ int ngx_blocking(ngx_socket_t s);
#else
-#define ngx_nonblocking(s) fcntl(s, F_SETFL, O_NONBLOCK)
+#define ngx_nonblocking(s) fcntl(s, F_SETFL, fcntl(s, F_GETFL) | O_NONBLOCK)
#define ngx_nonblocking_n "fcntl(O_NONBLOCK)"
+#define ngx_blocking(s) fcntl(s, F_SETFL, fcntl(s, F_GETFL) & ~O_NONBLOCK)
+#define ngx_blocking_n "fcntl(!O_NONBLOCK)"
+
#endif
int ngx_tcp_nopush(ngx_socket_t s);