Module: ngircd.git Branch: master Commit: 2cebfc54f5c450577e0a6d4f61a421ac2396e44e URL: http://ngircd.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git&a=commit;h=2cebf...
Author: Federico G. Schwindt fgsch@lodoss.net Date: Mon Sep 16 02:15:49 2013 +0100
Fix server reconnection
In some error cases conn_id will be left as SERVER_WAIT and subsequently ignored in Check_Servers(). Ensure conn_id is set to NONE before returning from New_Server() if we couldn't establish the connection.
Prompted by a report from gabrielgi-at-gmail-dot-com.
---
src/ngircd/conn.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c index 3b09278..324fa42 100644 --- a/src/ngircd/conn.c +++ b/src/ngircd/conn.c @@ -2131,6 +2131,7 @@ New_Server( int Server , ng_ipaddr_t *dest)
if (!ng_ipaddr_tostr_r(dest, ip_str)) { Log(LOG_WARNING, "New_Server: Could not convert IP to string"); + Conf_Server[Server].conn_id = NONE; return; }
@@ -2145,11 +2146,14 @@ New_Server( int Server , ng_ipaddr_t *dest) if (new_sock < 0) { Log(LOG_CRIT, "Can't create socket (af %d): %s!", af_dest, strerror(errno)); + Conf_Server[Server].conn_id = NONE; return; }
- if (!Init_Socket(new_sock)) + if (!Init_Socket(new_sock)) { + Conf_Server[Server].conn_id = NONE; return; + }
/* is a bind address configured? */ res = ng_ipaddr_af(&Conf_Server[Server].bind_addr); @@ -2165,6 +2169,7 @@ New_Server( int Server , ng_ipaddr_t *dest) if(( res != 0 ) && ( errno != EINPROGRESS )) { Log( LOG_CRIT, "Can't connect socket: %s!", strerror( errno )); close( new_sock ); + Conf_Server[Server].conn_id = NONE; return; }
@@ -2173,12 +2178,14 @@ New_Server( int Server , ng_ipaddr_t *dest) "Cannot allocate memory for server connection (socket %d)", new_sock); close( new_sock ); + Conf_Server[Server].conn_id = NONE; return; }
if (!io_event_create( new_sock, IO_WANTWRITE, cb_connserver)) { Log(LOG_ALERT, "io_event_create(): could not add fd %d", strerror(errno)); close(new_sock); + Conf_Server[Server].conn_id = NONE; return; }
@@ -2193,6 +2200,7 @@ New_Server( int Server , ng_ipaddr_t *dest) if (!c) { Log( LOG_ALERT, "Can't establish connection: can't create client structure!" ); io_close(new_sock); + Conf_Server[Server].conn_id = NONE; return; }
ngircd-commits@lists.barton.de