重现的步骤:
Winsock2 API将使用WSAGetLastError返回WSAEFAULT。
答案 0 :(得分:2)
如果您尝试使用IPv6套接字将UDP数据包发送到IPv4地址,sendto()
将报告WSAEFAULT
错误。 MSDN描述了此行为:
返回值
如果没有发生错误,sendto将返回发送的总字节数,该字节数可能小于len指示的数字。否则,返回值SOCKET_ERROR,并且可以通过调用WSAGetLastError来检索特定的错误代码。
...
WSAEFAULT
buf或to参数不是用户地址空间的一部分,或 tolen参数太小。
从技术上讲,这是正确的,因为IPv4地址小于IPv6地址。如果认为sizeof错误,实际上使用了错误的地址族,那么可能有点误导,因此sizeof代表了错误的使用大小。
另请参阅此处的Windows错误代码: