int socket(int domain, int type, int protocol);
AF_INET은 socket의 인수에서 domain으로서 IPv4 네트워크 도메인 소켓으로 원격지까지 통신할 수 있다.
(물론 로컬 호스트와 통신을 위해 로컬 루프백의 주소(ex. 127.0.0.1)에 연결 가능)
접두어 AF_는 Address Family의 의미이다.
소켓 타입을 의미하는 SOCK_STREAM은 socket의 type 인수로 스트림 소켓을 의미한다.
SOCK_STREAM의 특징은 연결 지향형(connection oriented)으로, 연결을 맺고 1:1 통신을 한다.
연결 지향형인 SOCK_STREAM 소켓 타입을 구현한 프로토콜로 TCP가 대표적이고 일반적이다.
cf. SOCK_DGRAM 소켓 타입은 비연결 방식이 특징적으로 일회성 데이터나 응답이 필요없는 작은 데이터 조각들을 전송할 때 유리하고, 1:n 통신이 가능하다.
데이터그램 소켓은 하나의 소켓으로 여러 원격지로 송신하거나 여러 원격지로부터 데이터를 수신할 수 있다.
SOCK_DGRAM 소켓 타입을 구현한 대표적인 프로토콜은 UDP(User Datagram Protocol)이다.
세 번째 인수인 protocol은 전송에 사용될 프로토콜 타입을 의미한다. 이 부분에 보통 0이나 IPPROTO_IP로 지정한다. (IPPROTO_IP는 0으로 지정되어 있어서 둘 중 아무거나 사용해도 상관 X) IPPROTO_IP는 지정된 소켓 타입에 의거해 인터넷 프로토콜을 자동으로 세팅한다.
따라서 SOCK_STREAM에 IPPROTO_IP를 사용하면 자동으로 TCP를 선택하고,
SOCK_DGRAM에 IPPROTO_IP를 사용하면 자동으로 UDP를 사용하게 된다.
(프로토콜을 직정 지정해서 UDP의 경우 IPPROTO_UDP를, TCP의 경우 IPPROTO_TCP를 사용해도 된다.)
데이터그램 소켓 |
스트림 소켓 |
|
데이터 경계 | 파일 경로 | 보존 안 됨 |
데이터 크기 제한 | 보존됨 | 없음 |
데이터 순서 | 보존 안 됨 | 보존됨 |
연결 과정 |
필요 없음 (1:n 통신 가능) |
필요함 (1:1 통신) |
신뢰성 |
낮음 (데이터 유실 시 복구 없음) |
높음 (데이터 유실 시 재전송) |
[LOB] level 20: xavius -> death_knight (0) | 2019.06.30 |
---|---|
[LOB] level 19: nightmare -> xavius (0) | 2019.06.30 |
[LOB] level 18: succubus -> nightmare (0) | 2019.06.28 |
[LOB] level 17: zomebie_assassin -> succubus (0) | 2019.06.28 |
[LOB] level 16: assasin -> zombie_assassin (0) | 2019.06.26 |