Wietse Venema: > Mark Martinec: > > While benchmarking a SMTP content filter, using smtp-source as a traffic > > generator and smtp-sink as sink, the message transfer rates were much > > worse than expected (about 100 seconds, instead of just a few seconds > > for 1000 messages). > > > > It turned out the problem is in a TCP session over a loopback interface > > between a content filter and smtp-sink. When pipelining is used and all > > the MAIL FROM, RCPT TO, and DATA arrive in one packet, the smtp-sink > > responds in two packets: the first is a "250 2.1.0 Ok" response to a > > MAIL FROM command, and the second packet carries a response to > > the rest: "250 2.1.5 Ok\r\n354 End data with...\r\n". > > Turning off the PIPELINING announcement should work. > > You may also try a global substition: > > From: > smtp_flush(state->stream); > > To: > SMTP_FLUSH(state->stream); > > Where SMTP_FLUSH is defined as: > > #define SMTP_FLUSH(fp) do { \ > if (vstream_peek(fp) <= 0 && readable(vstream_fileno(fp) <= 0) \ > smtp_flush(fp) \ > } while (0)
Make that: #define SMTP_FLUSH(fp) do { \ if (vstream_peek(fp) <= 0 && readable(vstream_fileno(fp)) <= 0) \ smtp_flush(fp); \ } while (0) > Sorry, no patch, because smtp-sink evolves randomly over time. > > Wietse >