2011-06-01 169 views
0

我想写一个样本客户端和服务器我可以绑定()为in6addr_any(即::)和SENDTO()本地主机

现在sever.c

  1. 创建V6 UDP套接字
  2. 绑定()为in6addr_any即::
  3. recvfrom的()(SENDTO在客户端成功后)

client.c

  1. 创建V6 UDP套接字
  2. 的sendto()::ffff:127.0.0.1

我的查询会是这种情况下正确的还是我失去了一些东西?

因为在客户端的sendto()是成功的,但recvfrom()挂在服务器端

任何帮助?

问候

Biswajeet

回答

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更合理(如果我理解设置权限,那么后者应该工作,假设侦听套接字接受这两个堆栈) 。

相关问题