一.socket
socket可看作是用户进程与内核网络协议的编程接口.
socket可用于本机进程间的通信,也可用于网络上不同主机间的进程通信.
下图显示的是各种网络协议的地址格式:
1.struct socketaddr(通用地址结构)
通过获取某种socketaddr结构体的首地址,不需要知道具体是哪种类型的socketaddr结构体,就可以根据地址类型字段确定结构体的内容.
因此,socket API可以接受各种类型的sockaddr结构体指针做参数,例如bind、accept、connect等函数,这些函数的参数应该设计成void *类型以便接受各种类型的指针,但是sock API的实现早于ANSI C标准化,那时还没有void *类型,因此这些函数的参数都用struct sockaddr *类型表示,即通用地址结构:
struct sockaddr {
sa_family_t sin_family;
char sa_data[14];
};
};
2.struct socketaddr_in(IPv4地址),
包括16位端口号和32位IP地址:
struct sockaddr_in {
char sin_zero[8];