Question

Existe-t-il un moyen dans un environnement Win32 de "syntoniser" le délai d'attente sur un appel de socket connect () ? Plus précisément, j'aimerais augmenter la durée du délai d'attente. Les sockets utilisés ne sont pas bloquants. Merci!

Était-ce utile?

La solution

Oui, c'est possible.

Si vous êtes en mode non bloquant après connect () , vous utilisez normalement select () pour attendre que l'E / S soit prête. Cette fonction possède un paramètre permettant de spécifier la valeur du délai d’attente et renvoie 0 en cas de dépassement du délai.

Autres conseils

Vous pouvez essayer d'utiliser les options de socket SO_RCVTIMEO et SO_SNDTIMEO pour définir des délais d'expiration pour toutes les opérations de socket. Exemple:

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");

Vous pouvez également essayer alarm (). Échantillon:

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

Non, ce n'est pas possible. Le délai de connexion par défaut peut être réduit, mais pas augmenté.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top