【发布时间】:2016-02-20 20:27:11
【问题描述】:
重现步骤:
- 创建 IPv6 套接字 AF_INET6/SOCK_DGRAM/UDP
- 将套接字绑定到 IPv6 地址
- 使用 sendto(...) winsocket API 但指定 IPv4 要发送到的套接字 AF_INET 系列地址地址
Winsock2 API 将返回带有 WSAGetLastError 的 WSAEFAULT。
【问题讨论】:
-
更好的方法是为 family 参数指定 AF_INET6,并使用 sockaddr_in6,但在该结构中放置 IPv4 映射的 IPv6 地址(如此处所述:tcpipguide.com/free/t_IPv6IPv4AddressEmbedding-2.htm)。这为您提供了一个 IPv6 套接字,它仍然通过 IPv4 进行通信,并且运行良好。