]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Use accept4 to speed up incoming TCP (and TLS) connections,
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Wed, 23 May 2018 13:55:09 +0000 (13:55 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Wed, 23 May 2018 13:55:09 +0000 (13:55 +0000)
  available on Linux and FreeBSD.

git-svn-id: file:///svn/unbound/trunk@4686 be551aaa-1e26-0410-a405-d3ace91eadb9

config.h.in
configure
configure.ac
doc/Changelog
util/netevent.c

index 9223894287764de418915d84cea59a59b846e3a8..04356f334edf2d7762a6a83edc75a248f8b88e70 100644 (file)
@@ -30,6 +30,9 @@
    internal symbols */
 #undef EXPORT_ALL_SYMBOLS
 
+/* Define to 1 if you have the `accept4' function. */
+#undef HAVE_ACCEPT4
+
 /* Define to 1 if you have the `arc4random' function. */
 #undef HAVE_ARC4RANDOM
 
index fcb49c2debf05665c0b5aa22380cb32c39c726df..45cb7198d9eeaa0e31e99ebb862769e6d7199a2e 100755 (executable)
--- a/configure
+++ b/configure
@@ -19702,7 +19702,7 @@ if test "$ac_res" != no; then :
 
 fi
 
-for ac_func in tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget
+for ac_func in tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget accept4
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
index 11f2ff56cc59f9b8c658f4caeda6863ba9055184..35a1096eb1d182f69f0b9bb7c7b4cedf5448f519 100644 (file)
@@ -1319,7 +1319,7 @@ AC_INCLUDES_DEFAULT
 #endif
 ])
 AC_SEARCH_LIBS([setusercontext], [util])
-AC_CHECK_FUNCS([tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget])
+AC_CHECK_FUNCS([tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget accept4])
 AC_CHECK_FUNCS([setresuid],,[AC_CHECK_FUNCS([setreuid])])
 AC_CHECK_FUNCS([setresgid],,[AC_CHECK_FUNCS([setregid])])
 
index 5decbe67b84d368dd3b1b140933d233a0712afe7..f00148911bb5f5819971b7986b6da83deed833a9 100644 (file)
@@ -1,3 +1,7 @@
+23 May 2018: Wouter
+       - Use accept4 to speed up incoming TCP (and TLS) connections,
+         available on Linux and FreeBSD.
+
 17 May 2018: Ralph
        - Qname minimisation default changed to yes.
 
index 34a1bd5e131c9cc1323ec588041eeb2a0936378e..3c3537856e882ef93d9d397f8cc191ef232bab51 100644 (file)
@@ -764,7 +764,12 @@ int comm_point_perform_accept(struct comm_point* c,
 {
        int new_fd;
        *addrlen = (socklen_t)sizeof(*addr);
+#ifndef HAVE_ACCEPT4
        new_fd = accept(c->fd, (struct sockaddr*)addr, addrlen);
+#else
+       /* SOCK_NONBLOCK saves extra calls to fcntl for the same result */
+       new_fd = accept4(c->fd, (struct sockaddr*)addr, addrlen, SOCK_NONBLOCK);
+#endif
        if(new_fd == -1) {
 #ifndef USE_WINSOCK
                /* EINTR is signal interrupt. others are closed connection. */
@@ -827,7 +832,9 @@ int comm_point_perform_accept(struct comm_point* c,
 #endif
                return -1;
        }
+#ifndef HAVE_ACCEPT4
        fd_set_nonblock(new_fd);
+#endif
        return new_fd;
 }