작성
·
439
0
좋은 강의 감사합니다.
이전 Completion Port 강의와 비교하며 이해하는 과정에서 물음의 생겨 질문드리게 되었습니다.
Listener내 StartAccept에서 CP 등록을 하는 부분에서 물음이 있습니다.
이전에는 listenSocket을 accept한 결과 값인 clientSocket을 CP에 등록한 반면,
현재는 listenSocket 자체가 CP에 등록되는데, 이러한 차이가 발생한 이유를 알수있을까요 ?
현재 코드에서 AcceptEx 동작이후 session->GetSocket() 에 대해 CP에 등록을 하지 않은 이유는 무엇인가요 ??
[이전 Completion Port 강의]
1. listen Socket 생성 , bind(), listen()
2. accept()
SOCKET clientSocket = ::accept(listenSocket, (SOCKADDR*)&clientAddr, &addrLen);
3. 소켓을 CP 등록
::CreateIoCompletionPort(clientSocket , ~ ~)
[현재 강의]
1. listen Socket 생성
2. listenSocke을 CP 등록
::CreateIoCompletionPort(listenSocket , ~ ~)
3. bind(), listen()
4. clientSocket 생성 (session() 생성자)
5. AcceptEx(_listenSocket, session->GetSocket() , ~~)
답변 1
0
accept는 리턴 결과로 소켓을 뱉지만,
비동기 버전 AcceptEx에선 이미 만들어진 소켓을 등록하고 있기 때문에
(애당초 AcceptEx가 바로 리턴해서 결과를 받는 구조가 아니죠) 방식이 다른 것이고,
함수의 사용은 MSDN을 참고해서 문서를 읽어보는게 중요합니다.
사실 '원리'라기보다는 그냥 MS에서 그렇게 만든거라 너무 깊게 파긴 힘드니 감안은 하셔야 합니다.