문제

Win32 환경에 소켓에서 타임 아웃을 "조정"하는 방법이 있습니까? connect() 전화? 구체적으로 시간 초과 길이를 늘리고 싶습니다. 사용중인 소켓은 차단이 없습니다. 감사!

도움이 되었습니까?

해결책

예, 가능합니다.

나중에 차단 모드에있는 경우 connect(), 당신은 일반적으로 사용합니다 select() I/O가 준비 될 때까지 기다리려면. 이 함수에는 시간 초과 값을 지정하기위한 매개 변수가 있으며 타임 아웃의 경우 0을 반환합니다.

다른 팁

SO_RCVTIMEO 및 SO_SNDTIMEO 소켓 옵션을 사용하여 모든 소켓 작업의 시간 초과를 설정하려고 시도 할 수 있습니다. 예시:

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

Alarm ()을 시도 할 수도 있습니다. 견본:

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

아니요, 이것은 불가능합니다. 기본 연결 시간 초과는 줄어들 수 있지만 증가 할 수는 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top