首页 文章

什么是最好的方法来了解OS /平台是否支持IPv6套接字以及在Perl中监听IPv4?

提问于
浏览
3

(如果重复,请关闭此帖子,我努力了,但找不到任何匹配的问题)

当绑定到IPv6 widcard地址时,某些OS /平台似乎会侦听IPv6和IPv4(tcp)连接,而有些只监听IPv6,如下所述:

for the V6Only argument

使用以下行:

如果您的平台不支持禁用此选项但您仍想监听AF_INET和AF_INET6连接,则必须创建两个侦听套接字,一个绑定到每个协议

在“How IPv6 Works on a Java Platform”部分

并按照正确答案in this SO question

现在我想写一些Perl代码,它可以确定底层OS /平台是否同时监听IPv6和IPv4(如果绑定到IPv6),如果是,我将仅绑定到IPv6,如果不是,我将创建2个套接字( 1表示IPv4,另一表示IPv6 .

我想知道最好的方法是什么?

如_1565942中所述,我可以使用

if( IO::Socket::IP->CAN_DISABLE_V6ONLY ) {
    ...
}
else {
    ...
}

但是,我不确定它是否会告诉我

如果底层OS /平台同时侦听IPv6和IPv4(如果绑定到IPv6)

或者它只会告诉你

无法禁用IPV6_V6ONLY套接字选项

1 回答

  • 4

    它只是告诉“无法禁用”IPV6_V6ONLY套接字选项“

    这是对的 .

    您可以做的是尝试创建PF_INET6套接字,如果成功,请检查其IPV6_V6ONLY套接字选项 . 如果这是真的,那么套接字只能侦听IPv6而不是IPv4,所以你必须创建另一个 . 如果为false,则套接字将捕获IPv6和IPv4,并且这一个套接字就足够了 .

相关问题