WSAEAFNOSUPPORT错误

时间:2010-09-29 13:02:28

标签: winsock2

您好 我正在实现P2P聊天应用程序,其中服务器将调解器用于交换IP和端口到连接对等体。 我收到WSAEAFNOSUPPORT 10047错误。

我创建了UDP 插座

sockfd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); 然后我将它绑定到本地IP和端口。

if(bind(sockfd,(struct sockaddr *)& localaddr,sizeof(localaddr))< 0)     {         ERROR_CODE( “create_socket:绑定()”);         返回-1;     }

然后我正在联系服务器。

//与服务器连接

sendto(sockfd,pBuffer,sizeof(nMessageType),0,(const sockaddr *)& config.serverAddr,size);

服务器跟踪另一个连接的peer.once peer连接到服务器它返回ip和其他peer的端口。所以peer可以使用IP和端口直接连接到其他peer。 但我在向其他同行发送数据时遇到错误

//向对等方发送数据

int ret = sendto(sockfd,sendBuf, sizeof(nMessagetype),0,(const sockaddr *)& m_peer.publicaddr,sockAddLen); 它返回10047 WSAEAFNOSUPPORT错误。

这里我使用相同的套接字联系服务器和其他同行是这个原因吗? 我不明白这里出了什么问题。 它能够正确连接服务器,但无法连接其他对等端。

1 个答案:

答案 0 :(得分:1)

sendto中指出,并且对于实际的错误消息WSAEAFNOSUPPORT,您用来发送到的地址与您发送的套接字不属于同一系列。

您必须确保m_peer.publicaddr中的地址与sockfd属于同一系列。 例如,如果您发送IPv6地址,则AF_INET将无效(必须为AF_INET6