accept如何知道接受的是IPv4连接还是IPv6的?
我想使用accept的后两个参数来得到接受的连接的IP地址
该怎么传参数?
能不能实现是IPv6就得到的是IPv6地址,IPv4就是IPv4
比如说传一个类似与sockaddr的结构,有一个字段来指明协议类型?
[解决办法]
如果能够解析IP包头就知道了,有个版本号
格式
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 版本 | 传输类别 | 数据流标签 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 有效载荷长度 | 下一个首部 | 跳数限制 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ 源 地 址 +
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ 目 的 地 址 +
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
版本占4 比特
IPV6 协议号 = 6
[解决办法]
v4:socket(AF_INET, ...)
v6: socket(AF_INET6, ...)
IPv4和v6的包头不同
不能混用