gpt4 book ai didi

perl - 了解操作系统/平台是否支持 IPv6 套接字以在 Perl 中收听 IPv4 的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-01 12:50:41 28 4
gpt4 key购买 nike

(如有重复请关闭本帖,我试了好久,没找到匹配的问题)

似乎有些操作系统/平台在绑定(bind)到 IPv6 万能符地址时同时监听 IPv6 和 IPv4 (tcp) 连接,而有些则仅监听 IPv6,如中所述:

for the V6Only argument

包含以下几行:

If your platform does not support disabling this option but you still want to listen for both AF_INET and AF_INET6 connections you will have to create two listening sockets, one bound to each protocol

在“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 {
...
}

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

if the underlying OS/platform listens for both IPv6 and IPv4 (if bound to IPv6)

或者它只会告诉

IPV6_V6ONLY socket option cannot be disabled

最佳答案

it just tells that the "IPV6_V6ONLY socket option cannot be disabled"

这是正确的。

你可以做的是尝试创建一个 PF_INET6 套接字,然后如果成功,检查它的 IPV6_V6ONLY 套接字选项。如果是这样,则套接字仅监听 IPv6 而不是 IPv4,因此您必须创建另一个套接字。如果为 false,则套接字将捕获 IPv6 和 IPv4,并且这个套接字就足够了。

关于perl - 了解操作系统/平台是否支持 IPv6 套接字以在 Perl 中收听 IPv4 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12622387/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com