자주 발생하는 수신 대기 중 발생되는 에러 리스트

 

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