33 Socket通信
无论是用socket操作TCP,还是UDP,首先都要调用socket函数,socket函数用于创建一个socket的文件描述符,唯一标识一个socket;把它叫作文件描述符,是因为在内核中会创建类似文件系统的数据结构,并且后续的操作都有用到它:
int socket(int domain, int type, int protocol);
三个参数的含义:
domain:表示使用什么IP层协议。AF_INET表示IPv4,AF_INET6表示IPv6。
type:表示socket类型。SOCK_STREAM是TCP面向流的,SOCK_DGRAM是UDP面向数据报的,SOCK_RAW可以直接操作IP层,或者非TCP和UDP的协议。例如ICMP。
protocol表示的协议,包括IPPROTO_TCP、IPPTOTO_UDP。
TCP编程模式:
其总体状态:用户态加内核态如图
UDP编程模式: