소켓 통신 종류에는 물론 TCP와 UDP가 존재하지만, 그 두 가지에서도 여러 방향으로 나뉘게 된다. 크게 네 가지로 나뉘는데 먼저 동기인가 비동기인가, 두 번째로 블록킹이냐 논 블록킹이냐 두가지 형태로 나뉜다. 동기 : 호출하자마자 바로 실행, 즉 호출하는 시점 = 실행하는 시점 비동기 : 호출을 해도 순서가 오지 않으면 늦게 실행될 수도 있음. 즉 호출하는 시점 ≠ 실행하는 시점 블록킹 : 함수를 호출하면 실행될 때 까지 기다린다. 기다리는 동안에는 다른 활동 X 논 블록킹 : 함수를 호출해도 다른 활동 가능, 참고로 비동기 관련해서 두 가지의 패턴이 존재하는데 Reactor Pattern 과 Proactor Pattern 패턴이다. 자세하게는 설명하지 않겠지만, 관련되어서 간단하게 설명하자면 Rea..
EX 시리즈란? 비동기 입출력의 경우, WSARecv와 WSASend를 통해 send와 recv는 호출을 받을 수 있다. 그렇지만 원래 사용하던 connect나 disconnect, accept는 비동기 호출을 받을 수 없다. 그런 부분을 확장하기 위해 나온 API가 아래 세 가지이다. ※ 사용하기 위해서는 WSAIoctl을 통해 런타임에 초기화를 진행하여야 합니다. WSAIoctl - 초기화 함수 위 원형에서 제일 중요한 부분은 dwIoControlCode 입니다. dwIoControlCode에는 필수적으로SIO_GET_EXTENSION_FUNCTION_POINTER 가 들어가야 합니다. 만약 들어가게 되면 lpvInBuffer에는 GUID라는 특별한 아이덴티티가 들어가게 됩니다. GUID의 종류는 아..
속성 이름 속성 내용 SO_LINGER Close 되었을 때, 소켓 버퍼에 남아있는 데이터를 어떻게 할 것인지 결정 SO_REUSEADDR 커널이 bind 정보를 들고 있을 때, 재 사용이 가능하도록 한다. SO_RCVBUF RecvBuffer 크기 결정 SO_SNDBUF SendBuffer 크기 결정 TCP_NODELAY Nagle 알고리즘 -> 작은 데이터들을 모아서 한번에 보내는 알고리즘( 껏다 켜기 ) SO_UPDATE_ACCEPT_CONTEXT ListenSocket의 특성을 ClientSocket에 그대로 적용 Linger 더보기 LINGER option; option.l_onoff = onoff; option.l_linger = linger; SetSockOpt(socket, SOL_SOCK..
강의 : (인프런)C++과 언리얼로 마드는 MMORPG 게임 개발 시리즈 - 게임서버 데이터를 저장하거나, 패킷으로 전달할 때 정수값이나 char 값은 그대로 저장할 수 있으나 동적으로 할당된 값은 그대로 저장할 수 없습니다. 예를 들어 아래의 구조체를 가진 데이터를 보내거나 저장하려고 할때, target이나 vector의 값을 저장해도 후에 복원시킬 때 제대로 된 값을 복원할 수 없습니다. 따라서 이러한 값을 byte나 배열로 만들어서 보내거나 저장할 수 있도록 하는 것을 직렬화라고 합니다. class Player { public: int32 hp = 0; int32 attack = 0; Player* target = nullptr; vector buffs; }; XML vs JSON javascrip..
책) TCP/IP 윈도우 소켓 프로그래밍 의 마지막장인 채팅 프로그램을 제작하여 봤습니다. 모델은 Select모델이지만 추후에 IOCP 라던지, Overlapped 모델로도 한번 변화시켜볼려고 합니다. 제작할때 오류도 많았지만.. 굉장이 재밌었네요. IPv6 버전은 아쉽게도 안되서 일단 IPv4만 구현해놨습니다! 클라이언트 같은 경우에는 코드가 굉장히 길고 WINAPI로 만들어져 있어서 길이 긴 점 양해 부탁드리겠습니다. 먼저 작동 형태입니다. 아래의 사진과 같이 여러개의 클라이언트가 접속했을때, 서버는 클라들이 입력하는 값을 접속한 클라에게 모두 전송하여 나타내는 형태입니다. 먼저 서버 코드입니다. Select ㅡ 모델로 구현되어있고, Select모델에 올렸던 코드와 굉장히 흡사합니다. 더보기 코드 서..
Select 모델 - 장점) 윈도우/리눅스 공통으로 사용할 수 있기 때문에 이식성이 높다. - 단점) 성능 최하 (매번 등록 비용), 64개 제한 WSAEventSelect 모델 - 장점) 비교적 뛰어난 성능, MFC 소켓 클래스에서 내부적으로 사용하는 모델이므로, 학습해두면 MFC 소켓 클래스의 내부 동작을 이해하고자 할 때 도움이 된다. - 단점) 64개 제한, 단일 윈도우 프로시저에서 일반 윈도우 메시지와 소켓 메시지를 처리해야 하므로 성능 저하의 요인이 된다. Overlapped (이벤트 기반) - 장점) 성능 - 단점) 64개 제한 Overlapped (콜백 기반) - 장점) 성능 - 단점) 모든 비동기 소켓 함수에서 사용 가능하진 않음 (accept). 빈번한 Alertable Wait으로 인..
입출력 모델중에서 가장 뛰어난 성능을 제공합니다. 핵심은 **입출력 완료 포트(I/O completion port)**라는 윈도우 운영체제가 제공하는 구조를 이해하고 활용하는 것입니다. 이것은 비동기 입출력 결과와 이 결과를 처리할 스레드에 관한 정보를 담고 있는 구조로, Overlapped 모델(콜백)에서 소개한 APC 큐와 비슷한 개념입니다. 실행 함수 CreateIoCompletionPort 처음 CP 생성시 HANDLE 반환 등록할 소켓 생성된 CP HANDLE key값 사용 코어 갯수(0) GetQueuedCompletionStatus WSARecv WSASend CP 결과 처리를 GetQueuedCompletionStatus APC → Completion Port로 변환(쓰레드마다 있지 않고 ..
실행 함수(비동기 + 논-블로킹) WSASend 비동기 입출력 소켓 WSABUF 배열의 시작 주소 + 개수 보내고/받은 바이트 수 상세 옵션인데 0 WSAOVERLAPPED 구조체 주소값 입출력이 완료되면 OS가 호출할 콜백 함수 void CompletionRoutin() 오류 발생 시 0 아닌 값 전송 바이트 수 비동기 입출력 함수 호출 시 넘겨준 WSAOVERLAPPED 구조체의 주소값 0 비동기 입출력 함수 완료되면, 쓰레드마다 있는 APC큐(Asynchronous procedure call queue)에 일감이 쌓임. APC큐는 비동기 입출력 결과 저장을 위해 운영체제가 각 스레드에 할당하는 메모리 영역입니다. Overlapped (Completion Routine 코드 작동 방식) 비동기 입출력..
- Total
- Today
- Yesterday
- 스레드풀
- 레지스터
- 자료구조
- 멀티쓰레드
- 인제대학교
- 야경
- 링크드 리스트
- 정보보안
- 워셜알고리즘
- queue
- STL
- 드림핵
- Dreamhack
- 더블버퍼링
- c++
- Select모델
- BFS
- 알고리즘
- 개발
- 컨퍼런스
- 시스템보안
- 지뢰찾기
- 백준
- 보안
- 고양이
- 학교
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |