Commit Diff
Diff:
de3e5fa77ca1b726fe242d869836d3c1c71c2cfb
2cebfc54f5c450577e0a6d4f61a421ac2396e44e
Commit:
2cebfc54f5c450577e0a6d4f61a421ac2396e44e
Tree:
2042bdf44dc4bdd83135a30dabe7748c00b820fc
Author:
Federico G. Schwindt <fgsch@lodoss.net>
Committer:
Federico G. Schwindt <fgsch@lodoss.net>
Date:
Mon Sep 16 01:15:49 2013 UTC
Message:
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.
blob - 3b0927872374fccddf3fd9de63ef22b8f4e6524a
blob + 324fa4219a9d204723572e1eeb8fbf8ea1badbee
--- src/ngircd/conn.c
+++ 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;
}
IRCNow