можно привязать () к in6addr_any (т.е. :) и sendto () localhost - PullRequest
0 голосов
/ 02 июня 2011

Я пытаюсь написать пример клиента и сервера

сейчас sever.c будет

  1. создать сокет v6 UDP
  2. bind () для in6addr_any, т.е.::
  3. recvfrom () (после успешного выполнения sendto на стороне клиента)

в client.c

  1. создаст сокет vd u6
  2. sendto () ::ffff:127.0.0.1

Мой вопрос был бы верен ли этот сценарий или я что-то упустил?

Поскольку sendto() на стороне клиента успешенно recvfrom() висит на стороне сервера

Любая помощь ??

С уважением

Biswajeet

1 Ответ

3 голосов
/ 02 июня 2011

in6addr_any is :: 0. В качестве аргумента для bind () это может означать «любой адрес IPv6» или «любой адрес IPv6 или IPv4» в зависимости от сокета IPV6_V6ONLY для сокета прослушивания (IPv6). Значение по умолчанию для этого sockopt зависит от вашей платформы и локальной конфигурации - для максимальной переносимости вы должны установить его вручную, чтобы получить желаемое поведение.

Если для него установлено значение 0, он должен получать пакеты, адресованные 127.0.0.1 (или любому другому локальному адресу), и именно здесь вы увидите адреса IPv6 в форме :: ffff: 127.0.0.1. Если установлено значение 1, то ваш прослушивающий сокет вообще не будет принимать пакеты, адресованные адресам IPv4 (в отображенной форме или иным образом).

Если у вас есть сокет отправки IPv6, имеет больше смысла отправлять в :: 1, чем :: ffff: 127.0.0.1 (если я правильно понял настройку, тогда последний, тем не менее, должен работать, предполагая, что прослушивающий сокет принимает оба стека).

...