X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Fngircd%2Fconn.c;h=7d2c4c6adb212f2a58c1c78050997c704b3e9968;hb=f0831174c3500cefc4f93d1da823b96a961d6c81;hp=e7a756695fa33ed7a91645af250aaf9e23701c0a;hpb=ca33cbda05902b0009058d369f88c0a7a43b1bbe;p=ngircd-alex.git diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c index e7a75669..7d2c4c6a 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.52 2002/03/12 14:37:52 alex Exp $ + * $Id: conn.c,v 1.62 2002/05/18 21:53:53 alex Exp $ * * connect.h: Verwaltung aller Netz-Verbindungen ("connections") */ @@ -54,7 +54,7 @@ #include "conn.h" -#define SERVER_WAIT NONE - 1 +#define SERVER_WAIT (NONE - 1) typedef struct _Connection @@ -92,7 +92,10 @@ LOCAL RES_STAT *ResolveName( CHAR *Host ); LOCAL VOID Do_ResolveAddr( struct sockaddr_in *Addr, INT w_fd ); LOCAL VOID Do_ResolveName( CHAR *Host, INT w_fd ); LOCAL VOID Read_Resolver_Result( INT r_fd ); + +#ifdef h_errno LOCAL CHAR *Resolv_Error( INT H_Error ); +#endif LOCAL fd_set My_Listeners; @@ -163,7 +166,7 @@ GLOBAL VOID Conn_Exit( VOID ) } /* Conn_Exit */ -GLOBAL BOOLEAN Conn_NewListener( CONST INT Port ) +GLOBAL BOOLEAN Conn_NewListener( CONST UINT Port ) { /* Neuen Listen-Socket erzeugen: der Server wartet dann auf * dem angegebenen Port auf Verbindungen. Kann der Listen- @@ -332,6 +335,10 @@ GLOBAL BOOLEAN Conn_WriteStr( CONN_ID Idx, CHAR *Format, ... ) BOOLEAN ok; va_list ap; + assert( Idx >= 0 ); + assert( My_Connections[Idx].sock > NONE ); + assert( Format != NULL ); + va_start( ap, Format ); if( vsnprintf( buffer, COMMAND_LEN - 2, Format, ap ) == COMMAND_LEN - 2 ) { @@ -805,7 +812,7 @@ LOCAL VOID Check_Connections( VOID ) if( My_Connections[i].lastping < time( NULL ) - Conf_PongTimeout ) { /* Timeout */ - Log( LOG_DEBUG, "Connection %d: Ping timeout.", i ); + Log( LOG_DEBUG, "Connection %d: Ping timeout: %d seconds.", i, Conf_PongTimeout ); Conn_Close( i, NULL, "Ping timeout", TRUE ); } } @@ -850,8 +857,10 @@ LOCAL VOID Check_Servers( VOID ) /* Haben wir schon eine Verbindung? */ for( n = 0; n < MAX_CONNECTIONS; n++ ) { + if( My_Connections[n].sock == NONE ) continue; + /* Verbindung zu diesem Server? */ - if(( My_Connections[n].sock != NONE ) && ( My_Connections[n].our_server == i )) + if( My_Connections[n].our_server == i ) { /* Komplett aufgebaute Verbindung? */ if( My_Connections[n].sock > NONE ) break; @@ -861,9 +870,9 @@ LOCAL VOID Check_Servers( VOID ) } /* Verbindung in dieser Server-Gruppe? */ - if(( My_Connections[n].sock != NONE ) && ( My_Connections[n].our_server != NONE )) + if(( My_Connections[n].our_server != NONE ) && ( Conf_Server[i].group != NONE )) { - if( Conf_Server[n].group == Conf_Server[i].group != NONE ) break; + if( Conf_Server[My_Connections[n].our_server].group == Conf_Server[i].group ) break; } } if( n < MAX_CONNECTIONS ) continue; @@ -970,6 +979,7 @@ LOCAL VOID New_Server( INT Server, CONN_ID Idx ) return; } Client_SetIntroducer( c, c ); + Client_SetToken( c, TOKEN_OUTBOUND ); /* Verbindung registrieren */ My_Connections[Idx].sock = new_sock; @@ -1007,12 +1017,14 @@ LOCAL BOOLEAN Init_Socket( INT Sock ) INT on = 1; +#ifdef O_NONBLOCK /* A/UX kennt das nicht? */ if( fcntl( Sock, F_SETFL, O_NONBLOCK ) != 0 ) { Log( LOG_CRIT, "Can't enable non-blocking mode: %s!", strerror( errno )); close( Sock ); return FALSE; } +#endif if( setsockopt( Sock, SOL_SOCKET, SO_REUSEADDR, &on, (socklen_t)sizeof( on )) != 0) { Log( LOG_ERR, "Can't set socket options: %s!", strerror( errno )); @@ -1145,7 +1157,11 @@ LOCAL VOID Do_ResolveAddr( struct sockaddr_in *Addr, INT w_fd ) if( h ) strcpy( hostname, h->h_name ); else { - Log_Resolver( LOG_WARNING, "Can't resolve address %s: code %s!", inet_ntoa( Addr->sin_addr ), Resolv_Error( h_errno )); +#ifdef h_errno + Log_Resolver( LOG_WARNING, "Can't resolve address \"%s\": %s!", inet_ntoa( Addr->sin_addr ), Resolv_Error( h_errno )); +#else + Log_Resolver( LOG_WARNING, "Can't resolve address \"%s\"!", inet_ntoa( Addr->sin_addr )); +#endif strcpy( hostname, inet_ntoa( Addr->sin_addr )); } @@ -1180,7 +1196,11 @@ LOCAL VOID Do_ResolveName( CHAR *Host, INT w_fd ) } else { +#ifdef h_errno Log_Resolver( LOG_WARNING, "Can't resolve \"%s\": %s!", Host, Resolv_Error( h_errno )); +#else + Log_Resolver( LOG_WARNING, "Can't resolve \"%s\"!", Host ); +#endif strcpy( ip, "" ); } @@ -1255,6 +1275,9 @@ LOCAL VOID Read_Resolver_Result( INT r_fd ) } /* Read_Resolver_Result */ + +#ifdef h_errno + LOCAL CHAR *Resolv_Error( INT H_Error ) { /* Fehlerbeschreibung fuer H_Error liefern */ @@ -1274,5 +1297,7 @@ LOCAL CHAR *Resolv_Error( INT H_Error ) } } /* Resolv_Error */ +#endif + /* -eof- */