2012-04-08 6 views
0

기본 UDP 소켓 파일 전송 서버/클라이언트 설정에서 go-back-n windowing을 사용하여 작업 중이며 불행하게도 할당 제약 조건으로 인해 Winsock을 사용하여 멈추었습니다.Winsock 프로그래밍의 시간 초과

일반적으로 신호가 부족한 패킷의 시간 초과를 관리하기 위해 나는 신호를 사용하지만 실제로 Windows에서 실제로 작동하는 방법과 이것이 실제로 최상의 솔루션인지 확실하지 않습니다. 이러한 종류의 소켓 타임 아웃을 처리하는 가장 좋은 방법이 있습니까? 또는 select()를 사용하여 타임 아웃을 관리하는 것이 가장 좋습니다.

답변

0

응용 프로그램에 "main()"함수가있는 경우 select()를 사용하여 시간 초과를 관리하는 것이 소켓 API 호출 만 사용하는 이점이 있으므로 코드는 다음을 지원하는 모든 플랫폼에서 작동해야합니다. bsd 스타일 소켓 api 및 windows 메시지 루프가 필요하지 않습니다.

당신이 윈도우 GUI 스타일의 응용 프로그램을 작성하는 경우 - SetTimer을 마찬가지로 - 일반적으로 얻을 HWND에 게시 준비 알림 메시지를 읽고 (쓰기)하는 소켓 핸들에 WinMain() 진입 점과 메시지 루프, 다음 WSAAsyncSelect()와 주기적으로 WM_TIMER 개의 알림을 게시하고 GetTickCount은 어떤 소켓이 너무 오래 유휴 상태인지 감지하는 데 사용할 수 있습니다.