X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fngircd%2Fconn.c;h=3b0927872374fccddf3fd9de63ef22b8f4e6524a;hb=9f74c0ff075dc67e068b8c2da0c069b6c622e436;hp=53497e3bfe33fd217784da97e6be071c869dcb09;hpb=4828bae8d321c6a87a724092ef0f258db7cd7e50;p=ngircd-alex.git diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c index 53497e3b..3b092787 100644 --- a/src/ngircd/conn.c +++ b/src/ngircd/conn.c @@ -1181,8 +1181,8 @@ Conn_Close( CONN_ID Idx, const char *LogMsg, const char *FwdMsg, bool InformClie /* Is this link already shutting down? */ if( Conn_OPTION_ISSET( &My_Connections[Idx], CONN_ISCLOSING )) { /* Conn_Close() has been called recursively for this link; - * probabe reason: Handle_Write() failed -- see below. */ - LogDebug("Recursive request to close connection: %d", Idx ); + * probable reason: Handle_Write() failed -- see below. */ + LogDebug("Recursive request to close connection %d!", Idx ); return; } @@ -1450,8 +1450,13 @@ Handle_Write( CONN_ID Idx ) if (errno == EAGAIN || errno == EINTR) return true; - Log(LOG_ERR, "Write error on connection %d (socket %d): %s!", - Idx, My_Connections[Idx].sock, strerror(errno)); + if (!Conn_OPTION_ISSET(&My_Connections[Idx], CONN_ISCLOSING)) + Log(LOG_ERR, + "Write error on connection %d (socket %d): %s!", + Idx, My_Connections[Idx].sock, strerror(errno)); + else + LogDebug("Recursive write error on connection %d (socket %d): %s!", + Idx, My_Connections[Idx].sock, strerror(errno)); Conn_Close(Idx, "Write error", NULL, false); return false; } @@ -1663,7 +1668,11 @@ Conn_StartLogin(CONN_ID Idx) #endif (void)Conn_WriteStr(Idx, "NOTICE AUTH :*** Looking up your hostname"); - (void)Handle_Write(Idx); + /* Send buffered data to the client, but break on errors + * because Handle_Write() would have closed the connection + * again in this case! */ + if (!Handle_Write(Idx)) + return; } Resolve_Addr(&My_Connections[Idx].proc_stat, &My_Connections[Idx].addr, @@ -2445,21 +2454,27 @@ cb_Read_Resolver_Result( int r_fd, UNUSED short events ) *ptr ? "" : ": ", *ptr ? "" : identptr); } - } else { + } else if(Conf_Ident) { Log(LOG_INFO, "IDENT lookup for connection %d: no result.", i); - if (Conf_NoticeAuth && Conf_Ident) + if (Conf_NoticeAuth) (void)Conn_WriteStr(i, "NOTICE AUTH :*** No ident response"); } #endif - if (Conf_NoticeAuth) - (void)Handle_Write(i); + if (Conf_NoticeAuth) { + /* Send buffered data to the client, but break on + * errors because Handle_Write() would have closed + * the connection again in this case! */ + if (!Handle_Write(i)) + return; + } Class_HandleServerBans(c); } #ifdef DEBUG - else Log( LOG_DEBUG, "Resolver: discarding result for already registered connection %d.", i ); + else + LogDebug("Resolver: discarding result for already registered connection %d.", i); #endif } /* cb_Read_Resolver_Result */