Connection Error] IOCP : GetQueuedCompletionStatus
Posted 2013. 10. 18. 12:22자주 발생하는 수신 대기 중 발생되는 에러 리스트
1. ERROR_SEM_TIMEOUT( 121 )
The semaphore timeout period has expired.
장비(방화벽 또는 라우터) 이상 또는 제한으로 인한 네트워크 단절(랜선을 뽑는 경우도 포함)이 발생했을 때
2. ERROR_NETNAME_DELETED( 64 )
The specified network name is no longer available.
보통 IOCP에서 소켓 끊어짐의 상징은 0 byte read다.
0 byte read가 통보되는 시점은 상대방 소켓에서 closesocket() 혹은 shutdown() 함수를 호출한 시점임
즉, 상대방이 closesocket() 혹은 shutdown() 을 호출하지 않고 종료해버리면 일반적으로 0 byte read는 발생하지 않는다.
이렇게 0 byte read가 발생하지 않은 상태에서 read() 혹은 write()를 시도하면 상대는 이미 종료 되었으므로
ERROR_NETNAME_DELETED 에러가 나게 됨.
이러한 경우를 우아한 종료와는 반대되는 개념으로 HardClose라고 함.
3. WSAENOTSOCK( 10054 )
An operation was attempted on something that is not a socket.
지정한 소켓은 정상 적이지 않습니다(INVALID_SOCKET). 별도의 종료처리없이 소켓을 닫으면 나옴.
4. ERROR_IO_PENDING( 997 )
펜딩은 수신중이라 걍 패쓰
5. ERROR_OPERATION_ABORTED( 995 (
The I/O operation has been aborted because of either a thread exit or an application request.
1. 작업이 취소된 사례. CreateIoCompletionPort에 추가한 핸들(소켓)이 닫혔을 때.
클라이언트가 연결된 상태에서 서버가 먼저 종료하면 발생.(server socket이 close되어서)
2. 동시에 송수신할 때
CreateIoCompletionPort에 핸들(소켓)을 추가하기 전에
WSADuplicateSocket 이나 DuplicateHandle 를 이용해 핸들을 복사하여 분리해서 추가해주면 된다
고 한다.
'Server' 카테고리의 다른 글
크리티컬섹션, 뮤텍스 (0) | 2012.09.04 |
---|---|
데드락 (0) | 2012.09.04 |
3way hand shake (0) | 2012.08.13 |
라우팅 (0) | 2012.08.13 |
OS의 종류와 차이점 (0) | 2012.08.13 |
- Filed under : Server