* 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.68 2002/08/26 00:03:15 alex Exp $
+ * $Id: conn.c,v 1.72 2002/09/07 22:34:44 alex Exp $
*
* connect.h: Verwaltung aller Netz-Verbindungen ("connections")
*/
GLOBAL VOID
Conn_Handler( VOID )
{
- /* Aktive Verbindungen ueberwachen. Folgende Aktionen
- * werden durchgefuehrt:
+ /* "Hauptschleife": Aktive Verbindungen ueberwachen. Folgende Aktionen
+ * werden dabei durchgefuehrt, bis der Server terminieren oder neu
+ * starten soll:
+ *
* - neue Verbindungen annehmen,
* - Server-Verbindungen aufbauen,
* - geschlossene Verbindungen loeschen,
Check_Connections( );
- /* Timeout initialisieren */
- tv.tv_sec = 1;
- tv.tv_usec = 0;
-
/* noch volle Lese-Buffer suchen */
for( i = 0; i < MAX_CONNECTIONS; i++ )
{
{
/* Fuer die Verbindung ist eine "Penalty-Zeit" gesetzt */
FD_CLR( My_Connections[i].sock, &read_sockets );
+ FD_CLR( My_Connections[i].sock, &write_sockets );
}
}
for( i = 0; i < Conn_MaxFD + 1; i++ )
}
}
+ /* Timeout initialisieren */
+ tv.tv_sec = 1;
+ tv.tv_usec = 0;
+
/* Auf Aktivitaet warten */
- if( select( Conn_MaxFD + 1, &read_sockets, &write_sockets, NULL, &tv ) == -1 )
+ i = select( Conn_MaxFD + 1, &read_sockets, &write_sockets, NULL, &tv );
+ if( i == 0 )
+ {
+ /* keine Veraenderung an den Sockets */
+ continue;
+ }
+ if( i == -1 )
{
+ /* Fehler (z.B. Interrupt) */
if( errno != EINTR )
{
Log( LOG_EMERG, "select(): %s!", strerror( errno ));
Log( LOG_DEBUG, "Connection %d with \"%s:%d\" established, now sendig PASS and SERVER ...", Idx, My_Connections[Idx].host, Conf_Server[My_Connections[Idx].our_server].port );
/* PASS und SERVER verschicken */
- Conn_WriteStr( Idx, "PASS %s %s", Conf_Server[My_Connections[Idx].our_server].pwd, PASSSERVERADD );
+ Conn_WriteStr( Idx, "PASS %s %s", Conf_Server[My_Connections[Idx].our_server].pwd, NGIRCd_ProtoID );
Conn_WriteStr( Idx, "SERVER %s :%s", Conf_ServerName, Conf_ServerInfo );
return TRUE;