Pergunta

Existe alguma maneira em um ambiente Win32 para "afinar" o tempo limite de uma chamada connect() tomada? Especificamente, eu gostaria de aumentar o comprimento de tempo limite. As tomadas em uso são não-bloqueio. Obrigado!

Foi útil?

Solução

Sim, isso é possível.

Se você estiver no modo sem bloqueio após connect() , você normalmente usa select() esperar até I / O está pronto. Esta função tem um parâmetro para especificar o valor de tempo limite e irá retornar 0 em caso de um tempo limite.

Outras dicas

Você pode tentar usar SO_RCVTIMEO e SO_SNDTIMEO opções de socket a limites de tempo estabelecidos para as operações de soquete. Exemplo:

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

Você também pode tentar alarme (). Amostra:

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

Não, isso não é possível. O tempo limite de conexão padrão pode ser diminuído, mas não aumentou.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top