no image
Socket Utils
소켓과 관련된 함수들을 랩핑한 Socket Utils 클래스이다. SocketUtils //SocketUtils.h#pragma once#include "NetAddress.h"/*========================* * SocketUtils* ========================*/class SocketUtils{public: static LPFN_CONNECTEX ConnectEx; static LPFN_DISCONNECTEX DisconnectEx; static LPFN_ACCEPTEX AcceptEx;public: static void Init(); static void Clear(); static bool BindWindowsFunction(SOCKET socket, GUI..
2023.02.26
no image
IOCP 모델
Overlapped 모델 (Completion Routine 콜백 기반)의 동작 순서를 정리하면 아래와 같다. -비동기 입출력 함수 완료되면, 쓰레드마다 있는 APC 큐에 일감이 쌓임  -Alertable Wait 상태로 들어가서 APC 큐를 비운다. (콜백 함수 호출) 하지만 단점으로는 APC 큐가 쓰레드마다 있고, Alertable Wait 자체도 조금 부담스럽다는 점이다.Overlapped IO는 I/O작업이 종료 될 때까지 해당 스레드는 I/O 작업이 완료됬는지 확인하고 I/O 완료되면 이후의 처리를 진행한다. 즉, I/O를 요청한 스레드에서 I/O 완료 확인과 후처리를 진행하는 것이다.IOCP그래서 이런 점을 개선한 IOCP (Input Output Completion Port) 모델이 있다. ..
2023.02.24
Overlapped 모델 (콜백 기반)
전에 알아봤던 Overlapped 모델은 이벤트를 기반으로 동작하였다. 이번에 알아볼 Overlapped 모델은 콜백 함수를 기반으로 작동 한다. Overlpapped IO Overlapped 모델 (Completion Routine 콜백 기반) 동작 순서 -비동기 입출력 지원하는 소켓 생성 -비동기 입출력 함수 호출 (Completion Routine의 시작 주소를 넘겨준다.) -비동기 작업이 바로 완료되지 않으면, WSA_IO_PENDING 오류 코드 뜸. -비동기 입출력 함수 호출한 쓰레드를 -> Alertable Wait 상태로 만든다. (Alertable Wait 상태가 되어야 콜백함수 호출 가능.) ex) WaitForSingleobjectEx, WaitForMulipleObjectsEx, S..
2023.02.24
Overlpapped 모델(이벤트 기반)
앞서 봤던 select 모델들은 비동기/봉쇄(blocking) 모델이었지만 이번에 배울 Overlapped 모델(이벤트 기반)은 비동기/비봉쇄(non-blocking)의 응용 모델이다. Overlpapped IO overlapped io (비동기 + 논블로킹) overlapped 함수를 건다 (wsarecv, wsasend) overlapped 함수가 성공했는지 확인 후 성공했으면 결과 얻어서 처리 실패했으면 사유를 확인 char sendbuffer[100]; wsabuf wsabuf[2]; wsabuf[0].buf = sendbuffer; wsabuf[0].len = 100; char sendbuffer2[100]; wsabuf[1].buf = sendbuffer2; wsabuf[1].len = 100..
2023.02.23
no image
비동기 vs 동기, Blocking vs Non-Blocking
동기와 비동기, 블로킹과 논 블로킹을 같거나 비슷한것이라고 오해하고 있었는데 오늘 공부하다 보니 해당 개념들은 전혀 다른 개념이라는 것을 깨달아서 정리하게 되었다. 동기(Synchronous) vs 비동기(Asynchronous) 동기와 비동기는 프로세스의 수행 순서 보장에 대한 매커니즘이다. 즉 처리해야 하는 작업들을 어떠한 흐름으로 처리할 것이냐에 관점이다. 가령, 동기(Synchronous)는 다른 작업이 끝나는 동시에 시작한다. 반면 비동기(Asynchronous)는 다른 작업이 끝나지 않아도 시작한다. (동시에 시작 안함) 동기(synchronous : 동시에 일어나는) - 동기는 말 그대로 동시에 일어난다는 뜻이다. 요청과 그 결과가 동시에 일어난다는 약속이다. 바로 요청을 하면 시간이 얼마나..
2023.02.23
no image
WSAEventSelect Model
이전에 select 모델을 알아봤는데, select 모델 같은 경우에는 매번 사용할 때 마다 소켓 셋을 초기화 하고 다시 등록해줘야 했다. 이런 작업도 결국 성능에 영향을 끼치기 때문에 많은 양의 접속과 송수신 요청을 처리하기에는 조금 아쉽다는 단점이 있었다. 그런 단점을 개선한 WSAEventSelect Model에 대해서 알아보자. WSAEventSelect Model WSAEventSelect 모델은 WSAEventSelect() 함수가 핵심적인 역할을 한다는 뜻에서 붙인 이름이다. 각 소켓마다 이벤트 객체를 하나씩 생성하여 짝지어두면, 네트워크 이벤트가 발생할 때마다 이벤트 객체는 신호 상태가 된다. 따라서 이벤트 객체의 신호 상태를 통해 네트워크 이벤트 발생을 감지할 수 있다. WSAEventS..
2023.02.23
no image
Select Model
기존의 우리가 사용하던 send(), recv()함수의 문제점은 바로 블로킹(blocking)소켓이라 데이터를 받을떄까지 무한정 대기하는 문제가 있다. 물론 이걸 쓰레드로 해결하면 문제는 해결된다. 하지만... 몇십명의 경우엔 문제가 없겟지만, 만일 1000명이상의 유저가 접속하고 있어야 하는 서버의 경우는 쓰레드를 1000개 만들어야 하게 된다. 한명의 유저에게 하나의 쓰레드를 주게 되면 중규모 이상의 서버라면 참 비효율적인 통신모델이다. 그래서 나온모델중 하나가 select모델이다. Select Model Select 모델은 select 함수가 핵심이 되는 모델이다. 소켓모드(블로킹, 넌블로킹)에 관계없이 여러 소켓을 한 스레드로 처리 할 수 있다. select모델의 가장 중요한 기능은 send, r..
2023.02.20
no image
TCP vs UDP
2023.02.20
UDP 통신에서 보낸 데이터 횟수와 받은 데이터 횟수가 다른 경우
TCP 기반에서 송수신하는 데이터에는 경계가 존재하지 않는다고 하는데, 이는 다음의 의미를 가진다. "데이터 송수신 과정에서 호출하는 입출력 함수의 호출횟수는 큰 의미를 지니지 않는다." 반대로 UDP는 데이터의 경계가 존재하는 프로토콜이므로, 데이터 송수신 과정에서 호출하는 입출력 함수의 호출횟수가 큰 의미를 지닌다. 때문에 입력 함수의 호출횟수와 출력함수의호출횟수가 완벽히 일치해야 송신된 데이터를 전부 수신할 수 있다. 예를 들어 세번의 출력함수를 통해 전송된 데이터는 반드시 세번의 입력함수 호출이 있어야 데이터를 전부 수신할 수 있다. 아래와 같이 데이터를 받기 까지 5초의 딜레이가 있는 코드가 있다고 하자. for(i = 0; i
2022.12.18