TheDodger
17-06-2004, 04:44
Moin moin!
Ich habe (mal wieder ;) ) ein sehr ... seltsames? ... Problem.
Ich versuche z.Z. einen Netzclient in reinem C zu schreiben.
Dieser soll Connects zu mehreren Ports aufnehmen und mir nur mitteilen, ob das funktioniert hat.
wenn ich das so mache, klappen fast alle Ports:
int numbytes;
char buf[MAXBUF];
if( ( numbytes = recv( m_socket, buf, MAXBUF - 1, 0 ) ) == -1 ) {
perror( "recv" );
exit( 1 );
}
buf[ numbytes ] = '\0';
printf( "Received: %s", buf );
Fast ... denn bei 993 (IMAPs) hängt das ganze bei recv() und geht nicht weiter.
Kleiner Implementierungsfehler ... ich hab ja auch keinen Timeout genutzt.
Dazu das hier:
struct timeval tv;
fd_set readfds;
tv.tv_sec = 4;
tv.tv_usec = 500000;
FD_ZERO( &readfds );
FD_SET( pSocket, &readfds );
select( 1, &readfds, NULL, NULL, &tv );
if( FD_ISSET( pSocket, &readfds ) == false ) {
printf( "Timed out.\n" );
return( false );
} else {
printf( "daaaaten ;)\n" );
}
Da ist es egal, welchen Port ich connecte, ich bekomme immer einen Timeout. :(
Kann mir bitte mal jemand den Wald vor meinem Kopf entfernen? :cool:
Ich habe (mal wieder ;) ) ein sehr ... seltsames? ... Problem.
Ich versuche z.Z. einen Netzclient in reinem C zu schreiben.
Dieser soll Connects zu mehreren Ports aufnehmen und mir nur mitteilen, ob das funktioniert hat.
wenn ich das so mache, klappen fast alle Ports:
int numbytes;
char buf[MAXBUF];
if( ( numbytes = recv( m_socket, buf, MAXBUF - 1, 0 ) ) == -1 ) {
perror( "recv" );
exit( 1 );
}
buf[ numbytes ] = '\0';
printf( "Received: %s", buf );
Fast ... denn bei 993 (IMAPs) hängt das ganze bei recv() und geht nicht weiter.
Kleiner Implementierungsfehler ... ich hab ja auch keinen Timeout genutzt.
Dazu das hier:
struct timeval tv;
fd_set readfds;
tv.tv_sec = 4;
tv.tv_usec = 500000;
FD_ZERO( &readfds );
FD_SET( pSocket, &readfds );
select( 1, &readfds, NULL, NULL, &tv );
if( FD_ISSET( pSocket, &readfds ) == false ) {
printf( "Timed out.\n" );
return( false );
} else {
printf( "daaaaten ;)\n" );
}
Da ist es egal, welchen Port ich connecte, ich bekomme immer einen Timeout. :(
Kann mir bitte mal jemand den Wald vor meinem Kopf entfernen? :cool: