본문 바로가기
개발 및 운영/프로그래밍

안전한 IOCP 프로그래밍

by Joseph.Lee 2019. 6. 23.

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객체 삭제 가능함

https://gpgstudy.com/forum/viewtopic.php?t=9075

반응형

댓글