[IRCServices] Patch: Flush write buffer on connect
Alexander Barton
alex at barton.de
Tue Nov 11 09:14:57 PST 2008
Hi!
The attached patch fixes the problem that IRCServices don't flush the
write buffer when the connection to the server is establised and data
has already been written to the buffer.
This caused the server to disconnect IRCServices after a timeout
because of no data has been sent. Solution has been to send
IRCServices a HUP signal right after starting it. I was able to
reproduce this problem on all of my machines (Linux on HPPA, Linux on
amd64, and Mac OS X on i386).
I think these messages describe the same problem:
<http://lists.ircservices.za.net/pipermail/ircservices/2007/005283.html>
<http://lists.ircservices.za.net/pipermail/ircservices/2007/005288.html>
<http://lists.ircservices.za.net/pipermail/ircservices/2007/005318.html>
<http://lists.ircservices.za.net/pipermail/ircservices/2007/005319.html>
<http://lists.ircservices.za.net/pipermail/ircservices/2007/005287.html>
Regards
Alex
diff -rup ircservices-5.1.13-orig/sockets.c ircservices-5.1.13/sockets.c
--- ircservices-5.1.13-orig/sockets.c 2008-11-07 18:11:57.000000000
+0100
+++ ircservices-5.1.13/sockets.c 2008-11-09 15:53:35.000000000 +0100
@@ -691,6 +691,10 @@ void check_sockets(void)
}
s->flags &= ~SF_CONNECTING;
s->flags |= SF_CONNECTED;
+
+ /* Flush already cached data for this socket */
+ flush_write_buffer(s);
+
FD_CLR(i, &write_fds);
if (!(s->flags & SF_MUTE))
FD_SET(i, &sock_fds);