목록Socket Programming (7)
Coding Memo
본 포스팅은 인프런에 등록되어 있는 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 님의 강의를 보고 간단하게 정리한 글입니다. socket을 blocking모드와 non-blocking 모드로 사용할 때, 장단점이 각각 존재했다. blocking socket은 조건이 만족되지 않아서 blocking되는 상황이 발생하고 non-blocking socket은 조건이 만족되지 않아서 불필요하게 반복체크하는 상황이 발생한다. 그렇다면 반복체크를 계속하지 않고 non-blocking으로 해당 함수의 return 값을 받아서 사용할 수 없을까? 이에 대한 해답은 여러가지가 있는데, 그 중 하나가 select를 이용하는 것이다. select는 non-blocking(synchronous) 수행을 위해 여러개의 소켓을 관리하고 return 가능한 소..
본 포스팅은 인프런에 등록되어 있는 Rockiss 님의 강의를 보고 간단하게 정리한 글입니다. 지금까지 했던 socket은 blocking으로 작동하는 소켓이었다. accept : 접속한 클라이언트가 있을 때 connect : 서버가 접속에 성공했을 때 send, sendto : 요청한 데이터를 sendBuffer에 복사 했을 때 recv, recvfrom : recvBuffer에 도착한 데이터가 존재하고, 이를 유저레벨 buffer에 복사했을때 다음 코드가 실행이 된다. 다시 말해, 위 조건이 실행되거나 에러가 발생할 때까지 다음 코드 실행은 block되는 것이다. 곰곰히 생각해보면 서버를 실행할 때 어떤 송수신이나 connect에 대한 응답을 무한히 대기하여 block된 상태로 있을 수는 없을 것이다..
본 포스팅은 인프런에 등록되어 있는 Rockiss 님의 강의를 보고 간단하게 정리한 글입니다. socket을 만들고 이 소켓에 대한 여러가지 세팅을 해줄 수 있다. 다음의 함수를 이용한다. setsockopt() int setsockopt( [in] SOCKET s, [in] int level, [in] int optname, [in] const char *optval, [in] int optlen ); SOCKET s 설정을 할 타켓 소켓 int level 옵션이 정의될 레벨 (SOL_SOCKET 이용) int optname 설정할 옵션 이름 const char* optival 설정할 옵션의 값 int optlen 설정할 옵션의 값의 크기 char*로 옵션의 값을 받는 이유는 옵션에 대한 값을 여러가지..
본 포스팅은 인프런에 등록되어 있는 Rockiss 님의 강의를 보고 간단하게 정리한 글입니다. UDP(User Data Protocol)은 네트워크 5계층에서 Transmission Layer에 해당하는 프로토콜 중 하나의 방식이다. UDP는 다음과 같은 특징이 있다. 1. 연결을 위한 별다른 경로가 없다. 2. 송수신 여부를 확인하지 않는다. 3. 데이터 손실에 대한 조치가 없다. 4. 데이터 그램 단위로 데이터를 전송한다. 5. 속도가 상대적으로 빠르다. (TCP에 비해) 좀 더 자세히 보자면 1. 연결을 위한 즉, listening 할 소켓이 필요가 없다. 대신 connecting UDP가 있다. (즐겨찾기와 비슷) 2. 직접적인 연결을 송수신 자간에 따로 하지 않고 송수신 여부도 따로 확인하지 않..
본 포스팅은 인프런에 등록되어 있는 Rockiss 님의 강의를 보고 간단하게 정리한 글입니다. TCP (Transmission Control Protocol)은 네트워크 5계층에서 Transport Layer에 해당하는 송수신 간 전송 방식 중 하나이다. 보통은 UDP와 대조되어 사용된다. TCP는 다음과 같은 특징을 가지고 있다. 1. 데이터 전송 경로 외에도, 호스트 간 연결이 따로 필요하다. 2. 송수신데이터에 대한 데이터의 경계(Boundary)가 없다. 3. 전송 순서가 보장된다. 4. 전송 시, 데이터 손실이 발생할 경우 다시 전송한다. (신뢰성이 있다.) 5. 데이터를 받을 호스트가 여건이 안될 경우 데이터를 일부만 전송한다. (흐름/혼잡제어) 6. 위 특징에 따라 고려할 것이 많으니 속도가..
본 포스팅은 인프런에 등록되어 있는 Rockiss 님의 강의를 보고 간단하게 정리한 글입니다. 소켓을 이용해서 간단하게 서버와 클라이언트 접속을 해보도록 하자. 소켓 프로그래밍을 위해서는 다음과 같은 라이브러리와 헤더가 추가되어야 한다. (아래 문서에도 나와있다.) (https://learn.microsoft.com/ko-kr/windows/win32/winsock/creating-a-basic-winsock-application) #include #include #include #pragma comment(lib, "ws2_32.lib") MS에서 제공하는 윈도우 소켓을 이용한다. 자세한 문서는 아래에 있다. https://learn.microsoft.com/ko-kr/windows/win32/wins..