1,先来看看创建套接字的函数:
int socket(int domain, int type, int protocol);
成功返回文件描述符(整型),失败返回-1。
domain:协议族,type:数据传输类型,protocol:具体协议
2.套接字类型(type)
套接字类型1:面向连接的套接字(SOCK_STREAM)特征:
传输过程中数据不会消失;安序传输数据;
传输的数据不存在数据边界(boundary);
套接字连接必须一一对应;
套接字类型2:面向消息的套接字(SOCK_DGRAM)特征:
强调快速传输而非传输顺序;传输的数据可能丢失也可能损毁;
传输的数据有数据边界;(接收数据的次数应和传输次数相同)
限制每次传输的数据大小;
不存在连接的概念;
3.协议的最终选择:
“IPv4协议族中面向连接的套接字”
int tcp_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
“IPv4协议族中面向消息的套接字”
int udp_socket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
第三个参数可以传递为0,除非遇到:同一协议族中存在多个数据传输方式相同的协议。