개발/서버
-
WSAEventSelect 모델개발/서버 2021. 11. 14. 22:55
select와 마찬가지로 한 스레드에서 최대 처리할 수 있는 이벤트 개수가 64개로 제한되기 때문에 많은 동접자를 처리해야 하는 서버에서는 쓰일 일이 없을 것 같습니다. 하지만 흐름을 알아두면 좋을 거 같아 정리합니다. 다음은 에코서버 예제입니다. 이벤트 객체 만들고 소켓과 연결 이벤트 객체와 세션은 벡터로 관리합니다. 실제로 세션은 아니지만 편한 관리를 위해 리스너 소켓과 이벤트 객체를 각 벡터의 0번째에 넣습니다. 그러고 나서 WSAEventSelect를 호출합니다. listenSocket에 연결할 listenEvent를 지정합니다. 이제부터는 listenEvent로 소켓의 상태를 판단할 수 있습니다. 신호 확인 WSAWaitMutipleEvent()는 세 번째 파라미터인 fWaitAll을 FALSE..
-
생각보다 쉽지만은 않은 SO_LINGER개발/서버 2019. 10. 22. 16:35
소켓을 설정할 때 나오는 옵션 중 SO_LINGER와 SO_DONTLINGER가 있다. 시중에서 판매되는 책에는 설명이 비교적 간단한데, 사용법은 보통 다음과 같다. 1 2 3 4 5 LINGER linger = { 0, 0 }; linger.l_onoff = 1; // SO_LINGER linger.l_linger = 0; // TIME-OUT setsockopt(socket, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof linger); closesocket(socket); 설명에 따르면 closesocket 함수의 디폴트 동작은 SO_DONTLINGER이다. 소켓을 통한 추가적인 데이터 송수신이 안 되지만 커널의 송신 버퍼에 있던 데이터는 상대에게 전부 보낸다. ..
-
[Hyper-V] 게스트에 고정 IP 주기개발/서버 2019. 9. 2. 03:29
이유는 모르겠지만 사람마다 PC마다 묘하게 다른 부분이 있는지, 각종 포스트를 그대로 따라해봐도 제대로 되지 않았다. 한참 삽질을 하고 나서 적어도 내 PC 환경에 맞는 답을 찾아냈다. 기본 DNS 서버에 값을 설정해주면 됐다. DNS의 역할은 어렴풋이 알고 있지만 적지 않은 포스트에서 기입하지 않고도 성공했다고 하길래 저도 모르게 별로 중요하게 생각하지 않았던 게 화근이었다. 여러 포스트를 보면 원래의 PC(이하 호스트)의 Hyper-V 관리자에서 [가상 스위치 관리자]를 통해 외부 스위치를 만들곤 한다. 외부 스위치는 호스트의 물리적인 이더넷(LAN, WAN 등에 가장 많이 활용되는 기술 규격)과 같은 수준의 이더넷을 만드는데, 아직은 만들어야 할 이유를 모르겠다. 내부는 호스트 내부에 고유의 가상 ..