(如果重复,请关闭此线程,我努力尝试,但找不到任何匹配的问题)

似乎有些操作系统/平台在绑定(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/

10-15 22:29