From: Alexander Barton Date: Thu, 26 Sep 2002 15:59:02 +0000 (+0000) Subject: - Conn_Write() prueft nun, ob der Socket noch offen ist, ehe Daten gesendet werden. X-Git-Tag: rel-0-6-0-pre1~201 X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=commitdiff_plain;h=c50ecda71559f78b0548840f3ced3098b8896055 - Conn_Write() prueft nun, ob der Socket noch offen ist, ehe Daten gesendet werden. --- diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c index 76b0822b..aeef7a3e 100644 --- a/src/ngircd/conn.c +++ b/src/ngircd/conn.c @@ -9,7 +9,7 @@ * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste * der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS. * - * $Id: conn.c,v 1.72 2002/09/07 22:34:44 alex Exp $ + * $Id: conn.c,v 1.73 2002/09/26 15:59:02 alex Exp $ * * connect.h: Verwaltung aller Netz-Verbindungen ("connections") */ @@ -359,7 +359,6 @@ va_dcl va_list ap; assert( Idx >= 0 ); - assert( My_Connections[Idx].sock > NONE ); assert( Format != NULL ); #ifdef PROTOTYPES @@ -393,10 +392,20 @@ Conn_Write( CONN_ID Idx, CHAR *Data, INT Len ) * der Client disconnectiert und FALSE geliefert. */ assert( Idx >= 0 ); - assert( My_Connections[Idx].sock > NONE ); assert( Data != NULL ); assert( Len > 0 ); + /* Ist der entsprechende Socket ueberhaupt noch offen? + * In einem "Handler-Durchlauf" kann es passieren, dass + * dem nicht mehr so ist, wenn einer von mehreren + * Conn_Write()'s fehlgeschlagen ist. In diesem Fall + * wird hier einfach ein Fehler geliefert. */ + if( ! My_Connections[Idx].sock > NONE ) + { + Log( LOG_DEBUG, "Skipped write on closed socket (connection %d).", Idx ); + return FALSE; + } + /* pruefen, ob Daten im Schreibpuffer sind. Wenn ja, zunaechst * pruefen, ob diese gesendet werden koennen */ if( My_Connections[Idx].wdatalen > 0 )