-LOCAL bool
-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 */
-
-