본업 복귀 이후.. 2달 가까운 시간이 지나서야 다시 착수 가능하게 되었다. 흥미롭고 재밌는 Chat System 만들기 시작!

기존 코드 이해를 시작하려니, 다이어그램만 모아둔 페이지가 있으면 좋겠다.

socket 연결하는 기본 코드를 작성 중. 이런 저수준 코드를 기억하고 작성하려면 어떻게 해야 할까??

→ X. 기억하려하기보다 이해 가능하도록 검색 및 인덱싱을 잘하자.

socket - bind()

현재까지, 단일스레드에서 최대 10개의 client socket 통신에 대해 반복문을 돌며 데이터를 console에 출력하는 에코 서버가 구축돼 있다.

반복문으로 되어 있다보니, 클라이언트의 입력을 순서대로 처리하는 것에서 먼저 들어온 A Client의 입력이 처리되지 않으면 B Client의 입력을 처리할 수 없는 문제가 있어… 이걸 IOCP로 개선하려 했다.

CreateIoCompletionPort() 함수를 만드는 과정에서 C style의 0 값을 전달하는 코드를 reinterpret_cast를 사용해서 모던하게 바꿔보려 했으나 의문점이 생겼다. 아래에 정리한다.

nullptr는 reinterpret_cast<>()의 인자로 전달하면 어떻게 될까?

[유추] IOCP에서 Overapped socket이 accept를 하려면 WSAIoctl() 함수를 통해 AcceptEx 의 함수 포인터를 얻은 뒤 AcceptEx() 함수를 실행한다. 이해해보자..

https://learn.microsoft.com/ko-kr/windows/win32/api/winsock2/nf-winsock2-wsaioctl

WSAIoctl 함수는 소켓, 전송 프로토콜 또는 통신 하위 시스템에 연결된 운영 매개 변수를 설정하거나 검색하는 데 사용됩니다.

NetworkManager를 World와 Engine과 모듈화를 더 잘 하고 싶다.

NetworkManager의 역할을 더 구체적으로 분리해보자.

소켓프로그래밍 자체는 데이터를 받고 처리하고 다시 보내는 통신 과정이다.