GetQueuedCompletionStatus의 0 transferred bytes (2)
저장소/VC++음..
원문 출처 : http://copynull.blog.me/10078931630
네트워크 접속이 비정상으로 끊겼을 때는
GetQueuedCompletionStatus()함수가 FALSE를 리턴하고 수신바이트 크기가 0(zero) 입니다.
정상적으로 끊겼을 때는
GetQueuedCompletionStatus()함수가 TRUE를 리턴하고 수신바이트 크기가 0(zero) 입니다.
이 때 GetQueuedCompletionStatus()에서 Overlapped Recv I/O 가 리턴됩니다.
비정상적종료 : 리턴값 false, 수신바이트 0
정상적인종료 : 리턴값 true, 수신바이트 0
즉 간단히 코드로 설명해보면
BOOL result = GetQueuedCompletionStatus(......);
if( result == FALSE || recvBytes == 0 )
{
if( result == FALSE )
{ 비정상 종료 알려주는 코드 WSAGetLastError()로 알림 }
// 정상 종료 코드
// 종료를 진행한다....
}
IO_TYPE로 검사후 진행되는 코드의 경우 아래와 같이 진행하면 되겠다.
if ( !result || ( result && !recvBytes ) )
{
if (OverlappedEx->IoType == IO_ACCEPT) // 데이터가 없어도 IO_ACCEPT라면 접속함수로 넘김
OnIoConnected(Object);
else // 그것도 아니면 완전 모두 에러처리
OnIoDisconnected(Object);
continue;
}
[출처] IOCP 종료확인 및 처리|작성자 Copynull
'저장소 > VC++' 카테고리의 다른 글
GetQueuedCompletionStatus의 0 transferred bytes (4) (0) | 2012.11.16 |
---|---|
GetQueuedCompletionStatus의 0 transferred bytes (3) (0) | 2012.11.16 |
GetQueuedCompletionStatus의 0 transferred bytes (1) (0) | 2012.11.16 |
동기화 - Interlocked 함수들 (0) | 2012.11.09 |
동기화 - Spin Lock (0) | 2012.11.09 |