[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);