Réglage de la temporisation des appels de connexion
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!
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é.