Не удается отключить опцию сокета IPV6_V6ONLY - PullRequest
5 голосов
/ 08 апреля 2011

Я пытаюсь отключить опцию сокета IPV6_V6ONLY .

int no = 0;     
setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&no, sizeof(no)); 

Почему вышеперечисленное не работает с ошибкой 22 (EINVAL)?

Это на OS X. Он также не работает, когда no равен 1. Работает настройка других параметров сокета, например

int yes = 1;
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (void *)&yes, sizeof(yes)); 

Ответы [ 4 ]

5 голосов
/ 21 ноября 2011

Похоже, * ОС, производная от BSD, не позволяет устанавливать или очищать эту опцию.Я вижу такое же поведение на FreeBSD 8.X.Сокет 100% AF_INET6.

4 голосов
/ 08 апреля 2011

Как ваш звонок на socket() выглядел для fd?Если первый параметр, семейство протоколов, не был AF_INET6 (или PF_INET6), то этот вызов не применим.

3 голосов
/ 12 мая 2015

Убедитесь, что вы звоните bind() после setsockopt() для этой опции.

0 голосов
/ 28 марта 2018

Еще одна вещь, которая может привести к сбою, - это делать это слишком поздно, кажется, что в Linux, по крайней мере, это должно быть сделано до того, как сокет будет связан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...