]> git.kaiwu.me - nginx.git/commitdiff
Linux accept4() support
authorIgor Sysoev <igor@sysoev.ru>
Thu, 25 Nov 2010 10:15:04 +0000 (10:15 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Thu, 25 Nov 2010 10:15:04 +0000 (10:15 +0000)
auto/os/features
src/event/ngx_event_accept.c
src/os/unix/ngx_posix_init.c

index ecd8e7fb4238d2643e9924afb5a80f7786b93780..c0fd6dd9e590e294393c4e863f7140fc8dd5c7bf 100644 (file)
@@ -305,6 +305,15 @@ ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_SETFIB, NULL, 4)"
 . auto/feature
 
 
+ngx_feature="accept4()"
+ngx_feature_name="NGX_HAVE_ACCEPT4"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/socket.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="accept4(0, NULL, NULL, SOCK_NONBLOCK)"
+. auto/feature
+
 if [ $NGX_FILE_AIO = YES ]; then
 
     ngx_feature="kqueue AIO support"
index ed5762e18dbbaf0830b528d4ac682a043e509606..67751faf769073ef54894a9e2bacd74d908c19b6 100644 (file)
@@ -46,7 +46,11 @@ ngx_event_accept(ngx_event_t *ev)
     do {
         socklen = NGX_SOCKADDRLEN;
 
+#if (NGX_HAVE_ACCEPT4)
+        s = accept4(lc->fd, (struct sockaddr *) sa, &socklen, SOCK_NONBLOCK);
+#else
         s = accept(lc->fd, (struct sockaddr *) sa, &socklen);
+#endif
 
         if (s == -1) {
             err = ngx_socket_errno;
index f21614499763c97ee25c3e86ae2197ad287bba3a..2357ab31f4605f3993a4c83e8f3d4e0c3d19328c 100644 (file)
@@ -60,7 +60,7 @@ ngx_os_init(ngx_log_t *log)
 
     ngx_max_sockets = (ngx_int_t) rlmt.rlim_cur;
 
-#if (NGX_HAVE_INHERITED_NONBLOCK)
+#if (NGX_HAVE_INHERITED_NONBLOCK || NGX_HAVE_ACCEPT4)
     ngx_inherited_nonblocking = 1;
 #else
     ngx_inherited_nonblocking = 0;