Search
🔵

bc9.3__2. title: 소켓은 애플리케이션 레이어와 전송 레이어의 인터페이스이다. 소켓을 생성하기 위해서는 TCP 또는 UDP 라는 통신방식을 정해 주어야 한다.

생성
🚀 prev note
🚀 next note
♻️ next note
14 more properties
소켓은 애플리케이션 레이어와 전송 레이어의 인터페이스이다(참고1,참고2). 즉, 애플리케이션 계층의 어떤 프로토콜을 사용하든, TCP나 UDP 등을 사용하기 위해서는 소켓이라는 것을 거쳐야 한다. 이러한 이유로 당연히 소켓을 생성(from1)할 때 전송 계층의 프로토콜을 명시적으로 정해 주어야 한다.
C를 이용하여 소켓 프로그래밍을 하는 경우에는 다음과 같은 방식으로 프로그래밍한다.
1.
통신방식을 정한다.
클라이언트: addrinfo 구조체에 값을 쓴다. 예를 들어 구조체 멤버 변수 family에는 AF_INET(IPv4를 의미함), 다른 멤버 변수 socktype에는 SOCK_STREAM(TCP를 의미함)을 쓴다. 참고로 UDP연결을 하고 싶다면 SOCK_DGRAM을 쓴다.
서버: addrinfo 구조체에 값을 쓴다. 예를 들어 구조체 멤버 변수 family에는 AF_INET(IPv4를 의미함), 다른 멤버 변수 socktype에는 SOCK_STREAM(TCP를 의미함)을 쓴다. 참고로 UDP연결을 하고 싶다면 SOCK_DGRAM을 쓴다. 여기까지는 클라이언트와 동일하다. 하지만 만약 서버를 만들고 싶다면 멤버 변수 flagAI_PASSIVE(서버를 의미함)을 쓴다.
2.
소켓을 생성한다
클라이언트: 통신방식, 포트번호, 도메인네임으로 소켓을 생성한다. getaddrinfo() 함수에 도메인네임, 포트, 통신방식을 전달하면 addrinfo 구조체 연결 리스트를 전달받는다(의문). addrinfo 구조체는 소켓을 생성하는 일에도 사용된다. socket() 함수에 addrinfo 구조체 변수를 입력하면 소켓이 생성된다.
서버: 통신방식, 포트번호로 소켓을 생성하고 대기한다. getaddrinfo() 함수에 포트, 통신방식을 전달하면(클라이언트를 작성할때와 달리 당연히 도메인네임은 NULL 을 전달한다) addrinfo 구조체 연결 리스트를 전달받는다. 이번에도 마찬가지로 addrinfo 구조체는 소켓을 생성하는 일에 사용된다. socket() 함수에 addrinfo 구조체 변수를 입력하면 소켓이 생성된다.
이렇게 생성된 소켓은 그냥 파일 디스크립터다.
parse me : 언젠가 이 글에 쓰이면 좋을 것 같은 재료들.
from : 과거의 어떤 생각이 이 생각을 만들었는가?
supplementary : 어떤 새로운 생각이 이 문서에 작성된 생각을 뒷받침하는가?
1.
None
opposite : 어떤 새로운 생각이 이 문서에 작성된 생각과 대조되는가?
1.
None
to : 이 문서에 작성된 생각이 어떤 생각으로 발전되고 이어지는가?
1.
2.
참고 : 레퍼런스