VisualStudio/C++서버 8

[C++서버] IOCP(Completion Port) 모델

Overlapped 콜백기반은 비동기 입출력 함수가 완료가 되면 스레드마다 있는 APC 큐에 일감이 쌓인다.Alertable Wait 상태로 들어가면 APC큐를 전체 비운다. (콜백 함수 호출)APC큐는 쓰레드마다있기 때문에 멀티 스레드 환경에서 적절하게 배분하는데 어려움이 있다.( Alertable Wait 상태로 들어가 APC큐를 비워야 하기 때문이다.)  또 한 Alertable Wait 계속 호출하는 부담이 있다. Overlapped  이벤트 방식으로는 소켓과 이벤트를 1대 1로 대응해야 하고 그리고 감시할 수 있는 수량도 64개 밖에 되지 않기 때문에 많은 수의 이벤트를 관찰하기 어렵다.  이런 문제를 보안하기 위해IOPC(Completion Port) 방식이 나오게 된다. IOPC모델은 Ove..

[C++] Overlapped모델 (비동기 + 논블로킹)

Overlapped 콜백기반은 비동기 입출력 함수가 완료가 되면 스레드마다 있는 APC 큐에 일감이 쌓인다.Alertable Wait 상태로 들어가면 APC큐를 전체 비운다. (콜백 함수 호출)APC큐는 쓰레드마다있기 때문에 멀티 스레드 환경에서 적절하게 배분하는데 어려움이 있다.( Alertable Wait 상태로 들어가 APC큐를 비워야 하기 때문이다.)  또 한 Alertable Wait 계속 호출하는 부담이 있다. Overlapped  이벤트 방식으로는 소켓과 이벤트를 1대 1로 대응해야 하고 그리고 감시할 수 있는 수량도 64개 밖에 되지 않기 때문에 많은 수의 이벤트를 관찰하기 어렵다.  이런 문제를 보안하기 위해 IOPC(Completion Port) 방식이 나오게된다.Overlapped모델..

[C++] Select 모델과 WASEventSelect모델

Select 모델 (동기방식)Select 모델은 여러 소켓에 대한 입출력 이벤트를 감지하고 처리할 수 있도록 도와줍니다.Select 모델은 여러 소켓의 상태를 감지하고, 해당 소켓들 중에서 입력이나 출력 준비가 된 소켓을 선택하여 처리할 수 있도록 해줍니다. 이는 비동기 소켓 프로그래밍의 복잡성을 줄이면서도 다중 클라이언트를 처리하는 데 효과적입니다. select() 함수를 사용하여 소켓의 상태를 검사하고, 필요한 작업을 수행합니다.Select 모델은 단일 스레드에서 여러 소켓을 처리하기 때문에 비교적 간단하게 구현할 수 있으며, 블로킹 소켓을 사용하더라도 다중 클라이언트를 동시에 처리할 수 있습니다. 그러나 매우 많은 수의 소켓을 다루는 경우에는 비효율적일 수 있습니다. 이런 경우에는 다른 모델이나 비..

[C++] setsockopt와 Socket 설정

1. SO_KEEPALIVE (Keep-Alive 설정)bool enable = true;::setsockopt(serverSocket, SOL_SOCKET, SO_KEEPALIVE, (char*)&enable, sizeof(enable));목적: 주기적으로 연결 상태를 확인합니다.설명: TCP 연결이 유효한지 주기적으로 확인합니다. 상대방이 갑작스럽게 연결을 끊어도 TCP 프로토콜을 통해 연결 상태를 확인할 수 있습니다.2. SO_LINGER (지연 닫기 설정)LINGER linger;linger.l_onoff = 1;linger.l_linger = 5;::setsockopt(serverSocket, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(linger));목적..

[C++] 블로킹방식 TCP/IP 소스

Client소켓 생성 (Socket Creation)클라이언트 소켓을 생성합니다.  AF_INET은 IPv4, SOCK_STREAM은 TCP를 의미합니다.SOCKET clientSocket = ::socket(AF_INET, SOCK_STREAM, 0);서버에 연결 (Connect)서버의 IP 주소와 포트 번호로 연결 요청을 보냅니다. if (::connect(clientSocket, (SOCKADDR*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR){}전체 코드#include "pch.h"#include #include "CorePch.h"#include #include #include #pragma comment(lib, "ws2_32.lib")int main..

[C++서버] 멀티 스레드 프로그래밍 개념 총 정리

Thread기본 사용 방법C++ 11부터 Thread가 기본 라이브러리로 C++에 생성되었다.사용하기 위해서는 #include 를 명시한다.아래의 코드를 실행하면 오류가 발생한다. 오류가 발생하는 이유는 HelloThread함수가 끝나기 전에 Main thread가 종료되어 발생하는 문제이다. 이를 Join을 통해 해결할 수 있다. <pre id="code_1700614870880" class="cpp" data-ke-la..

[C++] 빌드폴더 위치변경 방법 & pch사용 세팅 방법 & lib 참조 방법

Build생성 파일 위치 변경 1. 적당한 위치에 lib(정적 라이브러리) Build파일을 모아놓을 폴더를 생성한다. 2. 여러 프로젝트의 빌드파일을 모아놓을 Libraries 폴더를 만들었으니 Visualstudio에서 Libraries폴더로 출력폴더를 변경시켜 주기 위해 속성페이지를 들어간다. 속성 페이지는 프로젝트를 우클릭하여 속성을 누르면 된다. 3. 구성을 모든 구성으로 플랫폼 모든 플랫폼으로 변경한다. 변경하면 출력디렉터리등이 변경되는 걸 볼 수 있다. 모든 구성으로 변경하는 이유는 한 번에 Debug, Release에 모두 적용할 수 있기 때문이다. 4. 출력 디렉터리를 클릭 후 만들었던 Libraries폴더이름을 SolutionDir 사이에 넣어준다. 5. 적용 후 완료 클릭 pch사용 세..