协议族
通过socket函数的第一个参数传递套接字中使用的协议分类信息。
套接字中实际采用的最终协议信息是通过socket函数的第三个参数传递的。在指定的协议族范围内通过第一个参数决定第三个参数。
套接字类型(Type)
套接字类型指的是套接字的数据传输方式,通过socket函数的第二个参数传递,socket 函数第一个参数PF_INET协议族中也存在多种数据传输方式。
面向连接的套接字(SOCK_STREAM)
面向连接的套接字:可靠的、按序传递的、基于字节的面向连接的数据传输方式的套接字。(套接字必须一一对应)
面向消息的套接字(SOCK_DGRAM)
不可靠的、不按序传递的、以数据的高速传输为目的的套接字。
协议的最终选择(第三个参数)
传递前两个参数即可创建所需的套接字,大部分情况下可以向第三个参数传递0,除非遇到:同一个协议族中存在多个数据传输方式相同的协议。
参数PF_INET指IPv4网络协议族,SOCK_STEAM是面向连接的数据传输,满足这两个条件的协议只有IPPROTO_TCP,可创建的TCP套接字为:
int tcp_socket = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCK_DGRAM指的是面向消息的数据传输方式,满足上述条件的协议只有IPPROTO_UDP,可创建的UDP套接字为:
int udp_socket = socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);