IOCP 에 대해서

Yoon Sunkue·2021년 10월 26일
1

노트

목록 보기
7/9

CreateIoCompletionPort 함수의 마지막 인자는 가용 쓰레드에 관여한다.
실제로 IOCP 객체는 KQUEUE 자료구조를 기반으로 만들어져있는데, 관여할 수 있는 쓰레드의 개수로써 마지막 인자가 쓰이는 것이다. 쓰레드를 만들어준다는 의미가 아니다, 멀티쓰레딩으로 IOCP를 제대로 활용하려면, IOCP 에 관여하는, 즉 GetQueuedCompletionStatus 함수를 사용하는 쓰레드를 마지막 인자 만큼 (0을 넣었다면 std::thread::hardware_concurrency 만큼) 생성해서 바쁘게 돌려 주어야 한다. GetQueuedCompletionStatus 함수 자체는 블로킹 된다.

iocp에 read시 소켓이 끊겨 있으면 iocp가 false를 리턴하지만 이미 read가 되어 대기중인 상태에서 소켓이 끊기면 iocp가 통보를 해주지 않는다. 이 경우, recv 처리 부분에서 0바이트 recv인지 확인하여 소켓을 끊어 주어야 한다.

0개의 댓글