为什么在mac os x下为ipv6绑定(..)会给出错误号47

时间:2011-06-18 14:34:09

标签: c++ macos sockets

我正在进行套接字编程的第一步,因为我试图使用ipv6增加复杂性:

不应该这样:

struct sockaddr_in6* addr = new sockaddr_in6;
int s = socket(AF_INET6, SOCK_STREAM, 0);
addr->sin6_addr = in6addr_any;
addr->sin6_port = 1234;
int ret = bind(s, (struct sockaddr*)addr, sizeof(struct sockaddr_in6));

将套接字绑定到我的机器上的所有接口到端口1234? 麻烦是绑定返回-1而错误是47 根据errno.h,它是:

#define EAFNOSUPPORT    47              /* Address family not supported by protocol 
family */

我错过了什么?

由于

1 个答案:

答案 0 :(得分:2)

你应该将addr-> sin6_family设置为AF_INET6,或者在将地址结构传递给bind()之前至少将其初始化为零。