From: Vsevolod Stakhov Date: Mon, 7 Aug 2017 07:26:32 +0000 (+0100) Subject: [Feature] Set TCP_NODELAY for milter sockets X-Git-Tag: 1.7.0~758 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=8bcdcfc6c8e93dda7e5eeb2122bf2ed5772f00a3;p=rspamd.git [Feature] Set TCP_NODELAY for milter sockets Issue: #1790 --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 82498acdf..e6a89c7cf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -905,6 +905,7 @@ CHECK_INCLUDE_FILES(sys/file.h HAVE_SYS_FILE_H) CHECK_INCLUDE_FILES(sys/utsname.h HAVE_SYS_UTSNAME_H) CHECK_INCLUDE_FILES(sys/resource.h HAVE_SYS_RESOURCE_H) CHECK_INCLUDE_FILES(netinet/in.h HAVE_NETINET_IN_H) +CHECK_INCLUDE_FILES(netinet/tcp.h HAVE_NETINET_TCP_H) CHECK_INCLUDE_FILES(arpa/inet.h HAVE_ARPA_INET_H) CHECK_INCLUDE_FILES(netdb.h HAVE_NETDB_H) CHECK_INCLUDE_FILES(syslog.h HAVE_SYSLOG_H) diff --git a/config.h.in b/config.h.in index 29a2a4581..ef2bb1097 100644 --- a/config.h.in +++ b/config.h.in @@ -55,6 +55,7 @@ #cmakedefine HAVE_NANOSLEEP 1 #cmakedefine HAVE_NETDB_H 1 #cmakedefine HAVE_NETINET_IN_H 1 +#cmakedefine HAVE_NETINET_TCP_H 1 #cmakedefine HAVE_NFTW 1 #cmakedefine HAVE_OASYNC 1 #cmakedefine HAVE_ONOFOLLOW 1 diff --git a/src/libutil/unix-std.h b/src/libutil/unix-std.h index b1c8b6a02..218a35ffa 100644 --- a/src/libutil/unix-std.h +++ b/src/libutil/unix-std.h @@ -77,4 +77,8 @@ #include #endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + #endif diff --git a/src/rspamd_proxy.c b/src/rspamd_proxy.c index a2521fec1..be0980102 100644 --- a/src/rspamd_proxy.c +++ b/src/rspamd_proxy.c @@ -35,6 +35,10 @@ #include "libserver/milter.h" #include "contrib/zstd/zstd.h" +#ifdef HAVE_NETINET_TCP_H +#include /* for TCP_NODELAY */ +#endif + /* Rotate keys each minute by default */ #define DEFAULT_ROTATION_TIME 60.0 #define DEFAULT_RETRIES 5 @@ -2006,6 +2010,14 @@ proxy_accept_socket (gint fd, short what, void *arg) rspamd_inet_address_to_string (addr), rspamd_inet_address_get_port (addr)); +#ifdef TCP_NODELAY + gint sopt = 1; + + if (setsockopt (nfd, SOL_TCP, TCP_NODELAY, &sopt, sizeof (sopt)) == -1) { + msg_warn_session ("cannot set TCP_NODELAY: %s", strerror (errno)); + } +#endif + rspamd_milter_handle_socket (nfd, NULL, session->pool, ctx->ev_base,