套接字连接时出错

时间:2011-06-21 18:28:47

标签: c ipv6

我的服务器正在创建一个IPV6套接字。

在客户端我正在创建一个IPV4套接字。 现在,在客户端的连接API中,我传递了IPV4和IPV6地址结构的套接字描述符。 INET_connect(sock,(SocketAddress *)in6_addr,(int)sizeof(sockaddr_in6))== 0) 其中struct sockaddr_in6 in6_addr;

我收到连接错误。是由于这个还是其他原因? 请注意我的服务器是IPV6(具有IPV6地址)

2 个答案:

答案 0 :(得分:3)

您必须使用IPV6套接字连接到IPV6地址,或使用隧道服务,该服务将IPV4地址的流量转换为IPV6地址和从IPV6地址转换。

答案 1 :(得分:2)

  

在客户端我正在创建一个IPV4套接字

为什么呢?不要那样做。如果您的客户端程序创建了一个AF_INET套接字(或者在仅支持ip4的操作系统上运行),则无法在客户端上执行以实现此类连接。

如果你必须这样做 - 那么应该适应处理IPv4客户端的服务器。

服务器可能能够接受来自ip4客户端的连接请求 - 但只有当服务器端禁用IPV6_V6ONLY套接字选项时才会发生这种情况,显然,如果服务器的操作系统允许这样做。在这种情况下,ip6服务器将通过ipv4-mapped ipv6地址看到ip4客户端。