protocol 파라미터는 소켓이 데이터 전송에 실제로 사용할 프로토콜의 종류를 명시하는 데 쓴다. 전송 계층 프로토콜 또는 각종 인터넷 유틸리티 네트워크 계층 프로토콜 중 하나를 선택할 수 있다. 보편적으로 protocol 파라미터에 지정한 값은 외부로 나가는 IP 헤더의 프로토콜 필드에 직접 기록된다. 그러면 수신 측 운영체제가 이 값으로 패킷에 포함된 데이터를 어떻게 해석해야 할지 판단하게 된다. 표 3-3은 protocol 파라미터에 사용할 수 있는 값의 목록이다.
▼ 표 3-3 소켓 생성 시 지정할 수 있는 프로토콜 값
매크로 |
필요 소켓 종류 |
의미 |
IPPROTO_UDP |
SOCK_DGRAM |
UDP 데이터그램 패킷 |
IPPROTO_TCP |
SOCK_STREAM |
TCP 세그먼트 패킷 |
IPPROTO_IP 또는 0 |
상관없음 |
주어진 소켓 종류의 디폴트 프로토콜을 사용 |
알아두면 편리한 것은 프로토콜을 0으로 지정하면 운영체제가 알아서 소켓 형식에 맞는 디폴트 프로토콜을 골라준다는 점이다. 즉, IPv4 UDP 소켓을 만들려면 다음과 같이 호출하면 된다.
SOCKET udpSocket = socket(AF_INET, SOCK_DGRAM, 0);
그리고 TCP 소켓은 이렇게 만든다.
SOCKET udpSocket = socket(AF_INET, SOCK_DGRAM, 0);