Post
IOCP 소켓 종료 상황
소켓이 CloseSocket으로 안전하게 끊어졌는지, 아닌지에 따라
정상종료. 비정상종료로 나눌 수 있다.
정상종료는 GetQueuedCompletionStatus 완료된 바이트 수가 0일 때..
비정상 종료는 GetQueuedCompletionStatus 함수의 리턴값이 0이고 WSAGetLastError값이 64 이다.
그리고 IO도 NULL이 아니다.
나는 이렇게 사용하였다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | int err = WSAGetLastError(); if(NULL == userInfo) { PrintColor(YELLOW, "userInfo는 NULL! h \n"); } else if((!result && WSAGetLastError() == 64)&& ioInfo != NULL) // 비정상 종료 { printf("bytesTrans가 0이라 종료합니다 ID:%d \n", userInfo->id); closesocket(sock); int id = userInfo->id; EnterCriticalSection(&cs); UserList.RemoveKey(userInfo->id); SAFE_DELETE(userInfo); SAFE_DELETE(ioInfo); LeaveCriticalSection(&cs); printf("접속자 %d가 나갔습니다. \n", id); PrintColor(YELLOW, "접속자 나갔습니다. \n"); continue; } else if(!bytesTrans) { PrintColor(YELLOW, "정상적인 종료! \n"); } | cs |
'이전게시판 > C, C++' 카테고리의 다른 글
typedef한 자료형의 별명을 리턴값으로 사용시 에러... (0) | 2018.04.26 |
---|---|
프로토콜, 라우터 (0) | 2018.04.19 |
C3867 비표준 구문입니다. &를 사용하여 멤버 포인터를 만드세요 (0) | 2018.04.17 |
C++ 11 람다식(Lamda)이란 - 1 (0) | 2016.06.19 |
CRT 메모리 누수 체크 (0) | 2016.04.15 |
C++ 다중상속 문제점? (0) | 2016.04.04 |
C++ 데드락(DeadLock) (0) | 2016.04.04 |
2의 보수 만드는 법 (0) | 2016.04.01 |