(如果重复,请关闭此线程,我努力尝试,但找不到任何匹配的问题)
似乎有些操作系统/平台在绑定(bind)到 IPv6 通配符地址时同时监听 IPv6 和 IPv4 (tcp) 连接,而有些操作系统/平台仅监听 IPv6,如中所述:
for the V6Only argument
有以下几行:
在“How IPv6 Works on a Java Platform”部分
根据正确答案 in this SO question
现在我想编写一些 Perl 代码来确定底层操作系统/平台是否同时监听 IPv6 和 IPv4(如果绑定(bind)到 IPv6),如果是,我将只绑定(bind)到 IPv6,如果没有,我将创建 2 个套接字( 1 个用于 IPv4,另一个用于 IPv6)。
我想知道什么是最好的方法?
正如 IO::Socket::IP 中提到的,我可以使用
if( IO::Socket::IP->CAN_DISABLE_V6ONLY ) {
...
}
else {
...
}
但是,我不确定它是否会准确地告诉我
或者它只会告诉
最佳答案
这是对的。
您可以做的是尝试创建一个 PF_INET6 套接字,然后如果成功,请检查其 IPV6_V6ONLY 套接字选项。如果这是真的,那么套接字只监听 IPv6 而不是 IPv4,因此您必须创建另一个。如果为 false,则套接字将同时捕获 IPv6 和 IPv4,这一个套接字就足够了。
关于perl - 了解操作系统/平台是否支持 IPv6 套接字以在 Perl 中监听 IPv4 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12622387/