Frage

Gibt es eine Möglichkeit in einer Win32-Umgebung des Timeout auf einem Socket connect() Aufruf zu „tunen“? Insbesondere würde Ich mag die Timeout-Länge erhöhen. Die Steckdosen im Einsatz sind nicht blockierend. Dank!

War es hilfreich?

Lösung

Ja, das ist möglich.

Wenn Sie in nicht-blockierenden Modus nach connect() , verwenden Sie normalerweise select() warten, bis I / O bereit ist. Diese Funktion hat einen Parameter für den Timeout-Wert, der angibt, und wird 0 im Falle eines Timeout zurück.

Andere Tipps

Sie können versuchen, SO_RCVTIMEO und SO_SNDTIMEO Socket-Optionen zu verwenden, Timeouts für alle Socket-Operationen einzustellen. Beispiel:

struct timeval timeout;      
timeout.tv_sec = 10;
timeout.tv_usec = 0;

if (setsockopt (sockfd, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout,
            sizeof(timeout)) < 0)
    error("setsockopt failed\n");

if (setsockopt (sockfd, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout,
            sizeof(timeout)) < 0)
    error("setsockopt failed\n");

Sie können auch versuchen Alarm (). Beispiel:

signal( SIGALRM, connect_alarm ); /* connect_alarm is you signal handler */
alarm( secs ); /* secs is your timeout in seconds */
if ( connect( fd, addr, addrlen ) < 0 )
{
    if ( errno == EINTR ) /* timeout, do something below */
        ...
}
alarm( 0 ); /* cancel the alarm */

Nein, das ist nicht möglich. Das Standard-Connection-Timeout verringert werden kann, aber nicht erhöht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top