c++ - 为什么 bind(..) for ipv6 under mac os x 给我错误号 47

标签 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));

将我机器上所有接口(interface)的套接字绑定(bind)到端口 1234? 麻烦是 bind 返回 -1 并且 errno 是 47 根据 errno.h 是:

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

我错过了什么?

谢谢

最佳答案

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

关于c++ - 为什么 bind(..) for ipv6 under mac os x 给我错误号 47,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6396702/

相关文章:

c++ - 如果在类模板中使用,fstream 是否会在编译期间通过读写访问硬盘驱动器?

c++ - 控制像素着色器的键盘输入

c++ - 对解引用指针的引用

c++ - 在 C++ 中将静态数组声明为指针

ruby-on-rails - 将文件夹和子文件夹中的文件上传到 webapp

java - Java中通过套接字发送和接收数据

python - 套接字 "import"不工作 "from"可以!这是怎么回事?

java - Java 套接字是否支持全双工?

macos - vim ctrlp 插件加载我电脑中的所有文件而不是当前目录

java - Macos 更新 10.5.7 和 swing 可能出现问题