]> source.dussan.org Git - rspamd.git/commitdiff
[Feature] Set TCP_NODELAY for milter sockets
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 7 Aug 2017 07:26:32 +0000 (08:26 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 7 Aug 2017 07:26:32 +0000 (08:26 +0100)
Issue: #1790

CMakeLists.txt
config.h.in
src/libutil/unix-std.h
src/rspamd_proxy.c

index 82498acdfda9ca0150ab4b08da594484a0a126db..e6a89c7cf805eaf41ca0e1288fc192d4497d9500 100644 (file)
@@ -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)
index 29a2a458145b126e7bd5ad05bf3a8fd6f7f0d504..ef2bb1097fb2d859344b20023210690a86917033 100644 (file)
@@ -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
index b1c8b6a0279741635b2381917a226af8ea9dad4d..218a35ffafd66def671b1c517a92f33db3d30eee 100644 (file)
@@ -77,4 +77,8 @@
 #include <libgen.h>
 #endif
 
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
 #endif
index a2521fec10e768c050046e5af2a7ded4d787f9de..be0980102594f3a623a6677b159e7cc5e9fca2c4 100644 (file)
 #include "libserver/milter.h"
 #include "contrib/zstd/zstd.h"
 
+#ifdef HAVE_NETINET_TCP_H
+#include <netinet/tcp.h> /* 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,