GQCS = GetQueuedCompletionStatus
비동기 처리 함수들 (WSARecv, WSASend, WriteFile, ReadFile 등)
비동기 처리 개수만큼 GQCS 결과 발생
GQCS의 return이 FALSE일 경우에도 key 및 lpOverlapped가 NULL이 아닌 경우에는 해당 이벤트에 대한 처리가 필요함 (이런 경우에는 해당 핸들에 오류가 발생한 것으로 GetLastError으로 오류결과 받을 수 있고 해당 핸들에 대한 정리(Cleanup) 처리 등이 필요)
PostQueuedCompletionStatus로 비동기 처리에 대한 대체결과 Post가능 (이 경우 기존 작업 취소됨(?))
예를 들어 비동기 WSARecv받는 중에 closesocket하면 GQCS의 return값이 FALSE가 나오면서 key와 ov는 해당 값이 들어감. 이런 경우 error=ERROR_CONNECTION_ABORT 임
안전한 처리를 위해 Key및 Overlapped포인터에 대해 reference count로 관리 필요.
비동기 처리시작시 count증가,
GQCS결과 발생시 count감소.
count == 0일 때 비로소 key객체 삭제 가능함
반응형
'개발 및 운영 > 프로그래밍' 카테고리의 다른 글
EJBCA Java WS API 연결 (0) | 2019.07.10 |
---|---|
C++ & AFX(MFC) 환경에서 사용자 정의 메세지 사용하면서 SendMessage으로 메세지 호출할 때 Run-Time Check Failure (0) | 2019.06.27 |
OpenSSL FIPS 빌드 (0) | 2019.06.19 |
WindowsPE에서 디버깅하기 (0) | 2018.11.07 |
libcef 멈춰버리는 문제 해결 (0) | 2018.07.02 |
댓글