{ "hosts_try_dane", opt_stringptr,
(void *)offsetof(smtp_transport_options_block, hosts_try_dane) },
#endif
+ { "hosts_try_fastopen", opt_stringptr,
+ (void *)offsetof(smtp_transport_options_block, hosts_try_fastopen) },
#ifndef DISABLE_PRDR
{ "hosts_try_prdr", opt_stringptr,
(void *)offsetof(smtp_transport_options_block, hosts_try_prdr) },
NULL, /* hosts_try_dane */
NULL, /* hosts_require_dane */
#endif
+ NULL, /* hosts_try_fastopen */
#ifndef DISABLE_PRDR
US"*", /* hosts_try_prdr */
#endif
lflags.setting_up = TRUE;
lflags.esmtp = TRUE;
lflags.esmtp_sent = FALSE;
-#ifndef DISABLE_PRDR
-lflags.prdr_active;
-#endif
#ifdef SUPPORT_I18N
lflags.utf8_needed = FALSE;
#endif
*message_defer = FALSE;
smtp_command = US"initial connection";
+buffer[0] = '\0';
if (max_rcpt == 0) max_rcpt = 999999;
/* Set up the buffer for reading SMTP response packets. */
if (!lflags.smtps)
{
- BOOL good_response = smtp_read_response(&inblock, buffer, sizeof(buffer),
+ BOOL good_response;
+
+#ifdef TCP_QUICKACK
+ (void) setsockopt(inblock.sock, IPPROTO_TCP, TCP_QUICKACK, US &off, sizeof(off));
+#endif
+ good_response = smtp_read_response(&inblock, buffer, sizeof(buffer),
'2', ob->command_timeout);
#ifdef EXPERIMENTAL_DSN_INFO
smtp_greeting = string_copy(buffer);
/* Now check if the helo_data expansion went well, and sign off cleanly if
it didn't. */
- if (helo_data == NULL)
+ if (!helo_data)
{
uschar *message = string_sprintf("failed to expand helo_data: %s",
expand_string_message);
if (tblock->filter_command != NULL)
{
BOOL rc;
- uschar buffer[64];
- sprintf(CS buffer, "%.50s transport", tblock->name);
+ uschar fbuf[64];
+ sprintf(CS fbuf, "%.50s transport", tblock->name);
rc = transport_set_up_command(&transport_filter_argv, tblock->filter_command,
- TRUE, DEFER, addrlist, buffer, NULL);
+ TRUE, DEFER, addrlist, fbuf, NULL);
transport_filter_timeout = tblock->filter_timeout;
/* On failure, copy the error to all addresses, abandon the SMTP call, and
if (lflags.send_quit)
{
shutdown(outblock.sock, SHUT_WR);
- for (rc = 16; read(inblock.sock, inbuffer, sizeof(inbuffer)) > 0 && rc > 0;)
- rc--; /* drain socket */
+ if (fcntl(inblock.sock, F_SETFL, O_NONBLOCK) == 0)
+ for (rc = 16; read(inblock.sock, inbuffer, sizeof(inbuffer)) > 0 && rc > 0;)
+ rc--; /* drain socket */
}
(void)close(inblock.sock);