-LOCAL BOOLEAN
-Try_Write( CONN_ID Idx )
-{
- /* Versuchen, Daten aus dem Schreib-Puffer in den Socket zu
- * schreiben. TRUE wird geliefert, wenn entweder keine Daten
- * zum Versenden vorhanden sind oder erfolgreich bearbeitet
- * werden konnten. Im Fehlerfall wird FALSE geliefert und
- * die Verbindung geschlossen. */
-
- fd_set write_socket;
- struct timeval tv;
-
- assert( Idx > NONE );
- assert( My_Connections[Idx].sock > NONE );
-
- /* sind ueberhaupt Daten vorhanden? */
-#ifdef ZLIB
- if(( ! My_Connections[Idx].wdatalen > 0 ) && ( ! My_Connections[Idx].zip.wdatalen )) return TRUE;
-#else
- if( ! My_Connections[Idx].wdatalen > 0 ) return TRUE;
-#endif
-
- /* 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, &tv ) == -1 )
- {
- /* Fehler! */
- if( errno != EINTR )
- {
- Log( LOG_ALERT, "Try_Write(): select() failed: %s (con=%d, sock=%d)!", strerror( errno ), Idx, My_Connections[Idx].sock );
- Conn_Close( Idx, "Server error!", NULL, FALSE );
- return FALSE;
- }
- }
-
- if( FD_ISSET( My_Connections[Idx].sock, &write_socket )) return Handle_Write( Idx );
- else return TRUE;
-} /* Try_Write */
-
-
-LOCAL VOID
-Handle_Read( INT Sock )