From 261bf354b7644a99ace081a6ad6c7b8db8a1f51e Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 23 May 2018 13:55:09 +0000 Subject: [PATCH] - Use accept4 to speed up incoming TCP (and TLS) connections, available on Linux and FreeBSD. git-svn-id: file:///svn/unbound/trunk@4686 be551aaa-1e26-0410-a405-d3ace91eadb9 --- config.h.in | 3 +++ configure | 2 +- configure.ac | 2 +- doc/Changelog | 4 ++++ util/netevent.c | 7 +++++++ 5 files changed, 16 insertions(+), 2 deletions(-) diff --git a/config.h.in b/config.h.in index 922389428..04356f334 100644 --- a/config.h.in +++ b/config.h.in @@ -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 diff --git a/configure b/configure index fcb49c2de..45cb7198d 100755 --- 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" diff --git a/configure.ac b/configure.ac index 11f2ff56c..35a1096eb 100644 --- a/configure.ac +++ b/configure.ac @@ -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])]) diff --git a/doc/Changelog b/doc/Changelog index 5decbe67b..f00148911 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -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. diff --git a/util/netevent.c b/util/netevent.c index 34a1bd5e1..3c3537856 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -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; }