c - 如何确定用户的路由器/ISP 是否不支持 IPv6 连接?

标签 c networking ipv6 sockets

我正在使用 BSD 套接字,虽然我想很容易确定用户的 OS 是否支持 IPv6(通过尝试使用 AF_INET6 创建套接字),但我不确定如何以编程方式确定他们的路由器或 ISP 是否不支持此类连接。连接是否会简单地失败?如果是,我如何区分该失败与服务器是否只是离线?

最佳答案

正如 Ulrich Drepper 在他的 Userlevel IPv6 Programming Introduction 中所说的那样, 你应该调用 getaddrinfo 并设置 AI_ADDRCONFIG 标志(这确保你只会获得系统上当前配置的地址类型),然后按顺序尝试每个结果直到成功(因为结果已排序,第一个最有可能成功,依此类推)或全部失败。

关于c - 如何确定用户的路由器/ISP 是否不支持 IPv6 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6346045/

相关文章:

c - 从 ARP 条目获取给定 IP 的 MAC 地址(Linux 内核)

ios - NSURLSession 方法不调用

java - 使 Java 报告 IPv6 地址而不是 IPv4

java - 如何找到服务器可以处理的最大并发连接数?

networking - 在 QB64 中通过网络接收和发送字符串

android - 在 Android 上从 IPv4 地址合成 IPv4 映射的 IPv6 地址?

networking - Docker 容器在 localhost 上可见,但在具有自定义 bridge0 的其他主机上不可见

c++ - '...' 标记之前的预期声明说明符或 '*'

c - 当我尝试编译我的代码时,即使与 'undefined reference to pow()' 链接时,我也会收到错误提示 '-lm'

c - C如何调用不带参数的函数?