我在 IPv6 套接字连接中遇到错误
我的服务器正在创建一个 IPV6 套接字。
在客户端上,我正在创建一个 IPV4 套接字。 现在,在客户端的连接 API 中,我传递 IPV4 和 IPV6 地址结构的套接字描述符。
INET_connect( sock,(SocketAddress *)in6_addr,(int)sizeof( sockaddr_in6 ) ) == 0 )
我在
struct sockaddr_in6 in6_addr;
连接中遇到错误。是因为这个还是其他原因? 请注意,我的服务器是IPV6(有IPV6地址)
My server is creating a IPV6 socket.
On client I am creating a IPV4 socket.
Now, In the connect API on client side I am passing the socket descriptor of IPV4 and IPV6 address structure.
INET_connect( sock,(SocketAddress *)in6_addr,(int)sizeof( sockaddr_in6 ) ) == 0 )
where
struct sockaddr_in6 in6_addr;
I am getting error in connection. Is it due to this or some other reason ?
Please note that my server is IPV6(having an IPV6 address)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您必须使用 IPV6 套接字连接到 IPV6 地址,或使用隧道服务将流量从 IPV4 地址转换为 IPV6 地址。
You must use an IPV6 socket to connect to an IPV6 address, or use a tunneling service which will translate traffic from IPV4 addresses to and from IPV6 addresses.
为什么?不要那样做。如果您的客户端程序创建了 AF_INET 套接字(或在仅限 ip4 的操作系统上运行),那么您在客户端无法执行任何操作来实现此类连接。
如果您必须这样做 - 那么服务器应该适合处理 IPv4 客户端。
服务器可能能够接受来自 ip4 客户端的连接请求 - 但只有在服务器端禁用 IPV6_V6ONLY 套接字选项,并且显然,如果服务器的操作系统允许这样做时,才会发生这种情况。在这种情况下,ip6 服务器将通过 ipv4 映射的 ipv6 地址看到 ip4 客户端。
Why? Don't do that. If your client program creates an AF_INET socket (or is running on ip4-only OS) then there is nothing you can do on the client side to make such connection happen.
If you just have to do so - then it is the server that should be adapted to handle IPv4 clients.
Server might be able to accept a connection request from ip4 client - but it can only happen if server side disables IPV6_V6ONLY socket option and, obviously, if server's OS allows that. In this case ip6 server will see the ip4 client via ipv4-mapped ipv6 address.