* 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.92 2002/11/22 16:35:19 alex Exp $
+ * $Id: conn.c,v 1.94 2002/11/23 16:09:57 alex Exp $
*
* connect.h: Verwaltung aller Netz-Verbindungen ("connections")
*/
} /* Conn_Exit */
+GLOBAL INT
+Conn_InitListeners( VOID )
+{
+ /* Ports, auf denen der Server Verbindungen entgegennehmen
+ * soll, initialisieren */
+
+ INT created, i;
+
+ created = 0;
+ for( i = 0; i < Conf_ListenPorts_Count; i++ )
+ {
+ if( Conn_NewListener( Conf_ListenPorts[i] )) created++;
+ else Log( LOG_ERR, "Can't listen on port %u!", Conf_ListenPorts[i] );
+ }
+ return created;
+} /* Conn_InitListeners */
+
+
+GLOBAL VOID
+Conn_ExitListeners( VOID )
+{
+ /* Alle "Listen-Sockets" schliessen */
+
+ INT i;
+
+ Log( LOG_INFO, "Shutting down all listening sockets ..." );
+ for( i = 0; i < Conn_MaxFD + 1; i++ )
+ {
+ if( FD_ISSET( i, &My_Sockets ) && FD_ISSET( i, &My_Listeners ))
+ {
+ close( i );
+ Log( LOG_DEBUG, "Listening socket %d closed.", i );
+ }
+ }
+} /* Conn_ExitListeners */
+
+
GLOBAL BOOLEAN
Conn_NewListener( CONST UINT Port )
{
}
/* Timeout initialisieren */
- tv.tv_sec = 1;
- tv.tv_usec = 0;
+ tv.tv_sec = TIME_RES; tv.tv_usec = 0;
/* Auf Aktivitaet warten */
i = select( Conn_MaxFD + 1, &read_sockets, &write_sockets, NULL, &tv );
* Socket zu schreiben. */
fd_set write_socket;
+ struct timeval tv;
assert( Idx > NONE );
assert( My_Connections[Idx].sock > NONE );
assert( My_Connections[Idx].wdatalen > 0 );
+ /* Timeout initialisieren: 0 Sekunden, also nicht blockieren */
+ tv.tv_sec = 0; tv.tv_usec = 0;
+
FD_ZERO( &write_socket );
FD_SET( My_Connections[Idx].sock, &write_socket );
- if( select( My_Connections[Idx].sock + 1, NULL, &write_socket, NULL, 0 ) == -1 )
+ if( select( My_Connections[Idx].sock + 1, NULL, &write_socket, NULL, &tv ) == -1 )
{
/* Fehler! */
if( errno != EINTR )