소켓으로 주고받을 패킷의 종류는 type 파라미터로 지정한다. 이 값에 따라 소켓이 사용하는 전송 계층 프로토콜이 패킷을 처리하는 방식이 달라진다. 주로 사용되는 값을 표 3-2에 나열했다.
▼ 표 3-2 소켓 생성 시 지정할 수 있는 소켓 종류
매크로 |
의미 |
SOCK_STREAM |
순서와 전달이 보장되는 데이터 스트림. 스트림의 각 세그먼트를 패킷으로 주고받음 |
SOCK_DGRAM |
각 데이터그램을 패킷으로 주고받음 |
SOCK_RAW |
패킷 헤더를 응용 계층에서 직접 만들 수 있음 |
SOCK_SEQPACKET |
SOCK_STREAM과 유사하나 패킷 수신 시 항상 전체를 읽어 들여야 함 |
소켓 타입을 SOCK_STREAM으로 하면 운영체제가 소켓을 만들 때 상태유지형(stateful) 연결을 만들게 된다. 그러면 신뢰성 있고 순서가 보장되는 스트림으로 데이터를 처리할 수 있게 필요 리소스가 할당된다. 이는 TCP 프로토콜에 어울리는 소켓 형식이다. 반면 SOCK_DGRAM으로 하면 연결 상태를 유지할 필요가 없으므로 최소한의 리소스만 할당하여, 개별 데이터그램 단위로만 주고받을 수 있게 된다. 신뢰성을 신경 쓸 필요도, 패킷의 순서를 보장할 필요도 없는 이런 형태의 소켓 형식은 UDP 프로토콜에 어울린다.