Toma de conexión conectar tiempo de espera de llamada
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!
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.