socket 함수를 다시 확인해보자.
#incldue <sys/socket.h> int socket(int domain, int type, int protocol)
domain: 소켓이 사용할 프로토콜 정보 전달(e.g. ip version 4)
type: 소켓의 데이터 전송방식에 대한 정보 전달
TCP 또는 UDP 둘 중 하나를 선택한다.protocol: 두 컴퓨터 통신에 사용되는 프로토콜 정보 전달
- 중간에 데이터가 소멸되도 복구한다.
- 전송 순서대로 데이터가 어플리케이션 입장에서 수신된다
- 데이터의 경계가 존재하지 않는다.
- 소켓 대 소켓의 연결은 반드시 1대 1의 구조이다.
- 연결형 지향형의 소켓 타입(TCP)
- 비연결형 지향형의 소켓 타입(UDP)
여기서 연결 지향형은
#incldue <sys/socket.h> int tcp_socket = socket(PF_INET, SOCKET_STREAM, IPPROTO_TCP)
#incldue <sys/socket.h> int udp_socket = socket(PF_INET, SOCKET_DGRAM, IPPROTO_UDP)
첫 번째 두 번째 인자를 통해서 소켓의 프로토콜이 사실상 정해지기 때문에 세 번째 인자를 0으로 전달해도 된다.
TCP 소켓에 정보를 전달할 땐 한 번에 전달하며, 이는 몇개의 패킷에 담길지 모른다. 게다가 전송된 데이터는 receiver 버퍼에 1 바이트 단위로 존재하기 때문에, 한 번에 데이터를 받을 수도 있고 바이트 단위로 받을 수도 있다. boundary가 없음을 이해하자.