2008-11-12 5 views
2

Y at-il un moyen dans un environnement Win32 pour "régler" le délai d'attente sur un appel socket connect()? Plus précisément, j'aimerais augmenter la longueur du délai d'expiration. Les prises utilisées ne sont pas bloquantes. Merci!Tuning socket connect délai d'appel

Répondre

2

Oui, c'est possible.

Si vous êtes en mode non bloquant après connect(), vous devez normalement utiliser select() pour attendre que les E/S soient prêtes. Cette fonction a un paramètre pour spécifier la valeur de timeout et retournera 0 dans le cas d'un timeout.

+0

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

0

Vous pouvez essayer d'utiliser les options de socket SO_RCVTIMEO et SO_SNDTIMEO pour définir des délais d'attente 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 l'alarme(). Exemple:

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

Les délais de réception et d'envoi n'ont rien à voir avec le délai de connexion. – EJP

0

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