(如果重复,请关闭此线程,我努力了,但找不到任何匹配的问题)
似乎某些操作系统/平台在绑定到 IPv6 通配符地址时会同时监听 IPv6 和 IPv4 (tcp) 连接,而有些操作系统/平台仅监听 IPv6,如下所述:
使用以下几行:
如果您的平台不支持禁用此选项,但您仍想同时侦听 AF_INET 和 AF_INET6 连接,则必须创建两个侦听套接字,一个绑定到每个协议
在“ IPv6 如何在 Java 平台上工作”一节中
现在我想编写一些 Perl 代码,它可以确定底层操作系统/平台是否同时监听 IPv6 和 IPv4(如果绑定到 IPv6),如果是,我将只绑定到 IPv6,如果没有,我将创建 2 个套接字( 1 个用于 IPv4,另一个用于 IPv6)。
我想知道这可能是最好的方法吗?
如IO::Socket::IP中所述,我可以使用
if( IO::Socket::IP->CAN_DISABLE_V6ONLY ) {
...
}
else {
...
}
但是,我不确定它是否会准确地告诉我
如果底层操作系统/平台同时监听 IPv6 和 IPv4(如果绑定到 IPv6)
或者它只会告诉
不能禁用 IPV6_V6ONLY 套接字选项