4

我有一个 ipv4 服务器,它只接受通过 localhost 的连接(使用INADDR_LOOPBACK)。我想将此服务器转换为双栈 ipv6/ipv4。但是, usingin6addr_loopback只接受到::1.

我发现我可以同时接受 ipv4 和 ipv6 连接in6addr_any,但是因为这也允许来自任何地方的连接,这对我的特定情况没有用处。

是否可以同时绑定到 ipv6 localhost ( ::1) 和 ipv4 localhost ( 127.0.0.1)?

4

2 回答 2

4

AFAIK,这是不可能的。

您需要做的是创建两个套接字,一个绑定到 INADDR_LOOPBACK,一个绑定到 in6addr_loopback。然后,您可以使用您选择的多路复用器(poll、select、epoll 等)同时等待它们。

更新

刚刚提出了一些您可能需要考虑的解决方法。在这两种变通方法中,您绑定到in6addr_any.

  1. 建立连接后,检查远程地址,如果不是 127.0.0.1 或 ::1,则关闭它。虽然在 IP 地址上连接的行为并不理想(连接已建立/立即关闭,而不是被拒绝),但很高兴这可以完全在您的应用程序中完成。
  2. 调整操作系统 IP 堆栈的设置,以拒绝从非环回 IP 连接到您的端口。这在带有iptables的 Linux 上绝对可行。虽然行为更理想,但它需要在应用程序外部进行配置。
于 2010-02-17T00:43:58.227 回答
-4

仅仅因为你的服务器是双栈的,你的本地应用程序真的需要吗?你能随便挑一个就行吗?

于 2010-02-17T00:46:48.737 回答