我正在尝试编写示例客户端和服务器
现在sever.c
会
::
client.c
中的
::ffff:127.0.0.1
我的疑问是这个场景是正确的还是我错过了什么?
因为客户端sendto()
成功但recvfrom()
在服务器端挂起
任何帮助??
问候
Biswajeet
答案 0 :(得分:3)
in6addr_any是:: 0。作为bind()的参数,这可以表示“任何IPv6地址”或“任何IPv6或IPv4地址”,具体取决于侦听(IPv6)套接字的IPV6_V6ONLY sockopt。此sockopt的默认值取决于您的平台和本地配置 - 为了获得最大的可移植性,您必须手动设置它以获得您喜欢的任何行为。
如果设置为0,则它应该接收发往127.0.0.1(或任何其他本地地址)的数据包,这时您将看到:: ffff:127.0.0.1形式的IPv6地址。如果它设置为1,那么您的侦听套接字将不会接收发送到IPv4地址的数据包(以映射形式或其他方式)。
如果你有一个IPv6发送套接字,发送到:: 1比:: ffff:127.0.0.1更有意义(如果我理解设置正确,那么后者应该工作假设监听套接字接受两个堆栈)。