Shawn An alternative to "waiting a tad" might be to flush the queue. Apparently this can be done by disabling the Nagle algorithm that is designed to collect multiple chunks in a single TCP segment. It appears that you can disable Nagle and re-enable it again, to effectively flush the output queue. A bit more info here: https://stackoverflow.com/questions/855544/is-there-a-way-to-flush-a-posix-s... So you might do something like this (although please note that I'm nto a C programmer): + else if (strncmp(l, "flush", 5) == 0) { + int flag=0; + setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(int)); + int flag=1; + setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(int)); + } Having said that, I don't think this is going to work. The netservices.c file you're trying to patch is only used when reading the config file. This is probably why your delay is not affecting the connection - it's probably delaying only the reading of the configuration file. I think the file that does the sending is contest.c. I can't see a simple way of disabling and re-enabling Nagle (as above) at a specific stage in the dialogue. However it might be possible, notwithstanding the bug that Ralf mentioned, to introduce a sleep at the point that data are written (eg after socket(write)). Cheers Jeremy On Sun, 30 May 2021 at 10:19, Ralph M <ralphmitchell at gmail.com> wrote:
As far as the sleep() thing goes, you may be running into this, from the 'man 3 sleep' man page:
BUGS sleep() may be implemented using SIGALRM; mixing calls to alarm(2) and sleep() is a bad idea.
I don't know how you'd fix it. Hopefully this gives you a starting point.
Ralph Mitchell
On Sat, May 29, 2021 at 4:11 PM Shawn Heisey <hobbit at elyograg.org> wrote:
Over ten years ago, I asked on this list how I could get rid of the "incorrect pipelining message" logged by postfix every time the smtp, smtps, or submission tests are done.
https://lists.xymon.com/oldarchive/2010/11/msg00207.html
The fix that I claim worked (multiple send commands) was for a job I had at the time. Now I am have a personal mail server (that also runs xymon) and that fix I mentioned so long ago is not working.
I tweaked the code to allow a "pause" action in protocols.cfg and after modifying protocols.cfg to utilize it, I have eliminated the "incorrect command pipelining" message in mail.log. Here's the patch:
--- xymon-4.3.28/lib/netservices.c 2017-01-05 19:00:06.000000000 -0700 +++ pause-xymon-4.3.28/lib/netservices.c 2021-05-29 12:51:09.717461323 -0600 @@ -259,6 +259,10 @@ } } } + else if (strncmp(l, "pause ", 6) == 0) { + int pausetime = atoi(skipwhitespace(l+5)); + sleep(pausetime); + } }
if (fd) stackfclose(fd);
Here's the new definitions I created in protocols.cfg:
[smtp] pause 2 send "ehlo xymonnet.localdomain\r\n" pause 2 send "mail\r\n" pause 2 send "quit\r\n" expect "220" options banner port 25
[smtps] pause 2 send "ehlo xymonnet.localdomain\r\n" pause 2 send "mail\r\n" pause 2 send "quit\r\n" expect "220" options ssl,banner # No default port-number assignment for smtps - nonstandard according to IANA
[submission|msa] pause 2 send "ehlo xymonnet.localdomain\r\n" pause 2 send "mail\r\n" pause 2 send "quit\r\n" expect "220" options banner port 587
And this is now what I see in mail.log (testing smtps and submission:
May 29 13:51:15 bilbo postfix/submission/smtpd[16324]: connect from bilbo.elyograg.org[172.31.8.104] May 29 13:51:15 bilbo postfix/submission/smtpd[16324]: disconnect from bilbo.elyograg.org[172.31.8.104] quit=1 commands=1 May 29 13:51:15 bilbo postfix/smtps/smtpd[16325]: connect from bilbo.elyograg.org[172.31.8.104] May 29 13:51:15 bilbo postfix/smtps/smtpd[16325]: disconnect from bilbo.elyograg.org[172.31.8.104] quit=1 commands=1
Interesting thing here is that it's not actually pausing. Which probably means that I implemented it incorrectly. My training on C is ancient and I'm very rusty. But even though it doesn't pause, the error is gone, simply because each smtp command is now sent in a separate packet, which appears to *sometimes* be enough "delay" for postfix to not complain about pipelining. What happens now is occasionally I will get a yellow status on smtps with the xymon UI saying "Service smtps on bilbo.elyograg.org is not OK : Unexpected service response".
So I think what I will do before submitting a patch is implement a "null" action (which will do nothing) as well as a "pause" action, and get some help from the real C developers here for making "pause" behave as advertised. Can somebody point me to some instructions on properly creating and submitting a patch? Also, if I could get some info on any other files I need to modify (man pages, readme files, etc), I would really appreciate it.
Thanks, Shawn _______________________________________________ Xymon mailing list Xymon at xymon.com http://lists.xymon.com/mailman/listinfo/xymon
_______________________________________________ Xymon mailing list Xymon at xymon.com http://lists.xymon.com/mailman/listinfo/xymon