Anzeige:
Ergebnis 1 bis 2 von 2

Thema: timeout bei socketverbindung?

  1. #1
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615

    timeout bei socketverbindung?

    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:
    Code:
    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:
    Code:
    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?
    Bodo
    Systemadmistration UNIX

  2. #2
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615

    solved! :)

    Das Problem besteht bei diesem Code nicht mehr:
    Code:
    struct timeval tv;
    fd_set rset;
    	
    tv.tv_sec = 4;
    tv.tv_usec = 500000;
    
    FD_ZERO( &rset );
    FD_SET( pSocket, &rset );
    	
    int r = FD_ISSET( pSocket, &rset );
    	
    if( r > 0 ) {
    	
    	select( pSocket+1, &rset, NULL, NULL, &tv );
    
    	if( FD_ISSET( pSocket, &rset ) ) {
    	
    		int numbytes;
    		char buf[MAXBUF];
    	
    		if( ( numbytes = recv( pSocket, buf, MAXBUF - 1, 0 ) ) == -1 ) {
    	
    			perror( "recv" );
    			exit( 1 );
    		}
    
    		buf[ numbytes ] = '\0';
    		printf( "Received: %s", buf );		
    	
    	} else {
    	
    		printf( "Timed out.\n" );
    	}
    }
    	
    return;
    Wieder was gelernt ... :-)
    Bodo
    Systemadmistration UNIX

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •