SOCKET socket(int af, int type, int protocol);
소켓에사용할 네트워크 계층 프로토콜을 지정.
| AF_UNSPEC | 지정하지 않음 |
|---|---|
| AF_INET | 인터넷 프로토콜(버전 4) |
| AF_IPX | IPX (Internetwork Packet Exchange - 예전에 많이 쓰던 네트워크 계층 프로토콜) |
| AF_APPLETALK | 애플토크(예전 구형 애플이나 매킨토시에서 사용하던 네트워크 스택) |
| AF_INET6 | 인터넷 프로토콜(버전 6) |
요즘 게임을 만들때는 IPv4가 기준이므로 AF_INET을 쓰면 무난하ㄷ.
소켓으로 주고받을 패킷의 종류
이 값에 따라 소켓이 사용하는 전송 프로토콜이 패킷을 처리하는 방식이 달라진다.
| SOCK_STREAM | 순서와 전달이 보장되는 데이터 스트림. 스트림의 각 세그먼트를 패킷으로 주고받음 |
|---|---|
| SOCK_DGRAM | 각 데이터그램을 패킷으로 주고받음 |
| SOCK_RAW | 패킷 헤더를 응용 계층에서 직접 만들 수 있음 |
| SOCK_SEQPACKET | SOCK_STREAM과 유사하나 패킷 수신 시 항상 전체를 읽어 들여야 함 |
SOCK_STREAM 설정 시, 운영체제가 상태유지형(stareful) 연결을 만들게 된다.
SOCK_DGRAM으로 설정 시, 연결 상태를 유지할 필요가 없으므로 최소한의 리소스만 할당하여, 개별 데이터그램 단위로만 주고 받을 수 있다.
| 매크로 | 필요 소켓 종류 | 의미 |
|---|---|---|
| IPPROTO_UDP | SOCK_DGRAM | UDP 데이터그램 패킷 |
| IPPROTO_TCP | SOCK_STREAM | TCP 세그먼트 패킷 |
| IPPROTO_IP 또는 0 | 상관없음 | 주어진 소켓 종류의 디폴트 프로토콜을 사용 |
0으로 지정시 운영체제가 알아서 소켓 형식에 맞는 디폴트 프로토콜을 골라준다.
즉 IPv4 UDP 소켓 생성시 아래처럼 호출한다.
SOCKET udpSocket = socket(AF_INET, SOCK_DGRAM, 0);