윈도우에서 recv 함수 타임아웃 설정 시 주의 사항
by danny Kim
소켓에 타임아웃 옵션을 주기 위해서 SO_RCVTIMEO 를 지정하는데 유닉스에서는 timeval 구조체를 사용하지만 윈도우에서는 timeval 구조체의 tv_sec 가 초로 지정 되지 않는다. 아래와 같이 int 로 millisec 로 지정하자
tv.tv_sec= 10; // 대기시간 sec(대기시간은 늘릴 필요가 있음)
tv.tv_usec = 0; // 대기시간 millisec
dwTimeout = 10000;
#if defined (WIN32) || defined(_WIN64)
setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (const char*)&dwTimeout, sizeof(dwTimeout));
setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (const char*)&dwTimeout, sizeof(dwTimeout));
#else
setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (const char*)&tv, sizeof(tv));
setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (const char*)&tv, sizeof(tv));
#endif
Subscribe via RSS