无法关闭套接字选项IPV6_V6ONLY

时间:2011-04-07 21:33:25

标签: c macos sockets

我正在尝试turn off the socket option IPV6_V6ONLY

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

为什么上面的错误与errno 22(EINVAL)失败?

这是在OS X上。当no为1时它也不起作用。设置其他套接字选项有效,例如

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

4 个答案:

答案 0 :(得分:5)

看起来* BSD派生的操作系统不允许设置也不清除此选项。 我在FreeBSD 8.X上看到了相同的行为。套接字是100%AF_INET6。

答案 1 :(得分:4)

socket()fd的看法是什么样的?如果第一个参数(协议系列)不是AF_INET6(或PF_INET6),则此调用不适用。

答案 2 :(得分:3)

请确保在 bind()之后为此选项致电setsockopt()

答案 3 :(得分:0)

另一件可能导致失败的事情是做得太晚了,似乎在Linux上至少必须在套接字绑定之前完成。