Pregunta

¿Hay alguna forma en un entorno Win32 de "sintonizar"? el tiempo de espera en una llamada de socket connect () ? Específicamente, me gustaría aumentar la duración del tiempo de espera. Los enchufes en uso no bloquean. Gracias!

¿Fue útil?

Solución

Sí, esto es posible.

Si está en modo sin bloqueo después de connect () , normalmente usa select () para esperar hasta que la E / S esté lista. Esta función tiene un parámetro para especificar el valor de tiempo de espera y devolverá 0 en caso de tiempo de espera.

Otros consejos

Puede intentar usar las opciones de socket SO_RCVTIMEO y SO_SNDTIMEO para establecer tiempos de espera para cualquier operación de socket. Ejemplo:

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

También puede probar la alarma (). Muestra:

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

No, esto no es posible. El tiempo de espera de conexión predeterminado puede disminuirse, pero no aumentarse.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top