通用socket地址
socket网络编程接口中表示socket地址的是结构体sockaddr,其定义如下:1
2
3
4
5#include <bits/socket.h>
struct sockaddr {
sa_family_t sa_family;
char sa_data[14];
}
sa_family成员是地址族类型(sa_family_t)的变量。地址族类型通常与协议族类型是对应的。
sa_data成员用于存放socket地址值,不同的协议族的地址值具有不同的含义和长度:
专用socket地址
由于通用的socket地址在设置与获取IP和端口号时,需要执行烦锁的位操作,所以Linux为各个协议族提供了专门的socket地址结构体。
UNIX本地域协议
1 | #include <sys/un.h> |
IPv4
1 | #include <netinet/in.h> |
IPv6
1 | struct sockaddr_in6 { |
所有专用socket地址类型在实际使用过程中,都必须转换为通过sock地址类型sockaddr,使用强制转换即可。因为所有的socket编程接口使用的socket地址参数的类型都是sockaddr。