socket 함수의 3번째 인자

2019. 7. 23. 10:03드론

IPv4 인터넷 계층에서 TCP 연결지향형 데이터 전송 소켓을 사용한다고 하면 socket(AF_INET, SOCK_STREAM, 0)이라고 일반적으로 적게 된다. 그런데 소켓의 3번째 인자인 protocol에 0을 적는 이유는 무엇인가?

 

3번째 인자의 이름이 protocol이라고 명명되어있는데, 실제 프로토콜은 앞의 인터넷 계층과 전송 계층을 정의하면서 이뤄지게 되므로 의미가 없어지게 된다. 3번째 인자가 필요하게 되는 경우는 "하나의 프로토콜 체계 안에서 데이터의 전송방식이 동일한 프로토콜이 둘 이상 존재하는 경우에는 3번째 인자를 통해 구체화하게 된다

 

위 경우에는 두 옵션을 만족시키는 프로토콜이 하나만 존재하기 때문에 0을 넣는 것이다. 다음은 socket manual에 있는 protocol에 대한 설명이다

 

The protocol specifies a particular protocol to be used with the socket. Normally only a single protocol exists to support a particular socket type within a given protocol family, in which case protocol can be specified as 0. However, it is possible that many protocols may exist, in which case a particular protocol must be specified in this manner. The protocol number to use is specific to the “communication domain” in which communication is to take place; see protocols(5). See getprotoent(3) on how to map protocol name strings to protocol numbers.