X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=blobdiff_plain;f=src%2Fngircd%2Fconn.c;h=e58e6335a2a2cb298bbcf83703f7b7ccb666ddd2;hp=b798e6e75cd51b44eccf2c5c9e553505b77c0d81;hb=f732c7117e5a4b74b47c4594470506dcb2773760;hpb=4a6d44dce2436103dafaad199597ada354d9b794 diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c index b798e6e7..e58e6335 100644 --- a/src/ngircd/conn.c +++ b/src/ngircd/conn.c @@ -238,8 +238,10 @@ cb_connserver(int sock, UNUSED short what) static void server_login(CONN_ID idx) { - Log( LOG_INFO, "Connection %d with \"%s:%d\" established. Now logging in ...", idx, - My_Connections[idx].host, Conf_Server[Conf_GetServer( idx )].port ); + Log(LOG_INFO, + "Connection %d (socket %d) with \"%s:%d\" established. Now logging in ...", + idx, My_Connections[idx].sock, My_Connections[idx].host, + Conf_Server[Conf_GetServer(idx)].port); io_event_setcb( My_Connections[idx].sock, cb_clientserver); io_event_add( My_Connections[idx].sock, IO_WANTREAD|IO_WANTWRITE); @@ -856,7 +858,7 @@ static bool Conn_Write( CONN_ID Idx, char *Data, size_t Len ) { CLIENT *c; - size_t writebuf_limit = WRITEBUFFER_LEN; + size_t writebuf_limit = WRITEBUFFER_MAX_LEN; assert( Idx > NONE ); assert( Data != NULL ); assert( Len > 0 ); @@ -892,7 +894,7 @@ Conn_Write( CONN_ID Idx, char *Data, size_t Len ) /* Uncompressed link: * Check if outbound buffer has enough space for the data. */ if (array_bytes(&My_Connections[Idx].wbuf) + Len >= - writebuf_limit) { + WRITEBUFFER_FLUSH_LEN) { /* Buffer is full, flush it. Handle_Write deals with * low-level errors, if any. */ if (!Handle_Write(Idx)) @@ -904,8 +906,8 @@ Conn_Write( CONN_ID Idx, char *Data, size_t Len ) if (array_bytes(&My_Connections[Idx].wbuf) + Len >= writebuf_limit) { Log(LOG_NOTICE, - "Write buffer overflow (connection %d, size %lu byte)!", - Idx, + "Write buffer overflow (connection %d, limit is %lu bytes, %lu bytes new, %lu bytes pending)!", + Idx, writebuf_limit, Len, (unsigned long)array_bytes(&My_Connections[Idx].wbuf)); Conn_Close(Idx, "Write buffer overflow!", NULL, false); return false; @@ -978,7 +980,7 @@ Conn_Close( CONN_ID Idx, const char *LogMsg, const char *FwdMsg, bool InformClie if (FwdMsg) Conn_WriteStr(Idx, "ERROR :%s", FwdMsg); else - Conn_WriteStr(Idx, "ERROR :Closing connection."); + Conn_WriteStr(Idx, "ERROR :Closing connection"); } /* Try to write out the write buffer. Note: Handle_Write() eventually @@ -1274,7 +1276,7 @@ New_Connection(int Sock) "Refused connection from %s: too may connections (%ld) from this IP address!", ip_str, cnt); Simple_Message(new_sock, - "ERROR :Connection refused, too many connections from your IP address!"); + "ERROR :Connection refused, too many connections from your IP address"); close(new_sock); return -1; } @@ -1453,16 +1455,21 @@ Read_Request( CONN_ID Idx ) /* Update connection statistics */ My_Connections[Idx].bytes_in += len; + My_Connections[Idx].bps += Handle_Buffer(Idx); + + /* Make sure that there is still a valid client registered */ + c = Conn_GetClient(Idx); + if (!c) + return; /* Update timestamp of last data received if this connection is * registered as a user, server or service connection. Don't update * otherwise, so users have at least Conf_PongTimeout seconds time to * register with the IRC server -- see Check_Connections(). * Update "lastping", too, if time shifted backwards ... */ - c = Conn_GetClient(Idx); - if (c && (Client_Type(c) == CLIENT_USER - || Client_Type(c) == CLIENT_SERVER - || Client_Type(c) == CLIENT_SERVICE)) { + if (Client_Type(c) == CLIENT_USER + || Client_Type(c) == CLIENT_SERVER + || Client_Type(c) == CLIENT_SERVICE) { t = time(NULL); if (My_Connections[Idx].lastdata != t) My_Connections[Idx].bps = 0; @@ -1473,7 +1480,6 @@ Read_Request( CONN_ID Idx ) } /* Look at the data in the (read-) buffer of this connection */ - My_Connections[Idx].bps += Handle_Buffer(Idx); if (Client_Type(c) != CLIENT_SERVER && Client_Type(c) != CLIENT_UNKNOWNSERVER && Client_Type(c) != CLIENT_SERVICE @@ -1765,14 +1771,17 @@ New_Server( int Server , ng_ipaddr_t *dest) return; } - Log(LOG_INFO, "Establishing connection for \"%s\" to \"%s\" (%s) port %d ... ", - Conf_Server[Server].name, Conf_Server[Server].host, ip_str, - Conf_Server[Server].port); - af_dest = ng_ipaddr_af(dest); new_sock = socket(af_dest, SOCK_STREAM, 0); + + Log(LOG_INFO, + "Establishing connection for \"%s\" to \"%s:%d\" (%s), socket %d ...", + Conf_Server[Server].name, Conf_Server[Server].host, + Conf_Server[Server].port, ip_str, new_sock); + if (new_sock < 0) { - Log( LOG_CRIT, "Can't create socket (af %d) : %s!", af_dest, strerror( errno )); + Log(LOG_CRIT, "Can't create socket (af %d): %s!", + af_dest, strerror(errno)); return; }