*************************************************/
/* Copyright (c) University of Cambridge 1995 - 2018 */
+/* Copyright (c) The Exim Maintainers 2020 */
/* See the file NOTICE for conditions of use and distribution. */
/* A number of functions for driving outgoing SMTP calls. */
return FALSE;
}
-while (isspace(*expint)) expint++;
-if (*expint == 0) return TRUE;
+Uskip_whitespace(&expint);
+if (!*expint) return TRUE;
while ((iface = string_nextinlist(&expint, &sep, big_buffer,
big_buffer_size)))
static void
tfo_out_check(int sock)
{
+# ifdef __FreeBSD__
struct tcp_info tinfo;
int val;
socklen_t len = sizeof(val);
-# ifdef __FreeBSD__
/* The observability as of 12.1 is not useful as a client, only telling us that
a TFO option was used on SYN. It could have been a TFO-R, or ignored by the
server. */
# else /* Linux & Apple */
# if defined(TCP_INFO) && defined(EXIM_HAVE_TCPI_UNACKED)
+struct tcp_info tinfo;
+socklen_t len = sizeof(tinfo);
switch (tcp_out_fastopen)
{
rc = n;
}
else
-
+ {
rc = send(outblock->cctx->sock, outblock->buffer, n,
#ifdef MSG_MORE
more ? MSG_MORE : 0
0
#endif
);
+
+#if defined(__linux__)
+ /* This is a workaround for a current linux kernel bug: as of
+ 5.6.8-200.fc31.x86_64 small (<MSS) writes get delayed by about 200ms,
+ This is despite NODELAY being active.
+ https://bugzilla.redhat.com/show_bug.cgi?id=1803806 */
+
+ if (!more)
+ setsockopt(outblock->cctx->sock, IPPROTO_TCP, TCP_CORK, &off, sizeof(off));
+#endif
+ }
}
if (rc <= 0)