목록OVERLAPPED (4)
Coding Memo
상황 GetQueuedCompletionStatus()가 성공적으로 완료되었음에도 불구하고, Overlapped 구조체의 값이 이상했다. (기대했던 값이 아니었다.) GetQueuedCompletionStatus를 호출한 HANDLE에 `connectEvent`라는 overlapped를 상속하는 구조체가 연결되어 있는 파일 핸들을 등록했다. 따라서 GetQueuedCompletionStatus가 성공적으로 완료되었다면, 인자로 넣어주었던 LPOVERLAPPED*가 이 connectEvent를 가리키는 포인터가 되어야 된다. 그러나 이 포인터는 메모리 오염이 일어난 듯 값이 이상했다. 먼저, IOCPEvent와 ConnectEvent는 다음과 같다.// EventType은 unsigned ..
Rockiss님의 게임 서버 강의에서 학습한 내용과 몇몇 인터넷 검색을 통해 정리하였다. Select WSAAsyncSelect WSAEventSelect Overlapped (event) Overlapped (callback) IOCP Async/Sync IO Sync IO Sync IO Sync IO Async IO Async IO Async IO Select Pros - 윈도우 뿐만 아니라 Linux 계열에서도 사용이 가능함 (이식성 우수) Cons - 호환성이 높은 만큼 성능이 다른 모델 보다 좋지 않음 (매번 fd_set 등록 필요) - 한번에 64개의 소켓까지 사용 가능 (FD_SETSIZE = 64) Methods 1. fd_set 초기화 (FD_ZERO) 2. socket 등록 (FD_SE..
본 포스팅은 인프런에 등록되어 있는 Rockiss 님의 강의를 보고 간단하게 정리한 글입니다. 이전에 나왔던 Select, Overlapped(event), Overlapped(callback)들은 장점도 있었지만 단점도 많은 기능이었다. 일반 비동기 호출: 매우 보기 불편해보이는 중첩 무한 반복문 Select: FD_SET 당 최대 64개 한정, 매번 set을 만들어줘야함, 완전한 비동기 방식이 아님, 성능 좋지 않음 WSAEventSelect: 한번에 소켓 64개 제한 Overlapped(event): 소켓과 이벤트를 1:1로만 대응시킴, 한번에 소켓 64개 한정(overlapped) Overlapped(callback): 매번 Alertable Wait 상태를 만들어야되는 시스템적 부담(OS에 의해..
본 포스팅은 인프런에 등록되어 있는 Rockiss 님의 강의를 보고 간단하게 정리한 글입니다. 지난 번에는 WSASelect 모델을 이용해 Socket IO를 처리했었다. Select와 WSASelect는 결국 모두 Select를 활용하는 방법으로 동기 I/O 느낌이 강하게 든다. 이번에는 Overlapped에서 Event와 Callback 함수를 활용한 진짜 소켓 비동기 I/O 모델을 사용해볼 것이다. Overlapped I/O는 Asynchronous(비동기)처리의 Non-blocking 방식의 모델이다. 비동기+논블로킹의 방식은 callback 방식으로 호출을 하면서 callback의 형태로 다시 결과를 받는 방식이다. (Asynchronous) 물론, 이 때 다른 일을 처리할 수 있다.(non-b..