为什么mac os x下ipv6的bind(.)会给我错误号47

Why does bind(..) for ipv6 under mac os x give me error number 47

本文关键字:错误 bind os mac ipv6 为什么      更新时间:2023-10-16

我正在采取套接字编程的第一步,这增加了复杂性,我正在尝试使用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?问题是bind返回-1,errno为47根据errno.h为:

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

我错过了什么?

感谢

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