将Jetty绑定到IPv6地址

3

我正在尝试将Jetty绑定到仅监听IPv6地址。 我正在使用Jetty 7.4.2.v20110526。

我的jetty.xml文件:

<Call name="addConnector">
  <Arg>
      <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
        <Set name="host">::1</Set>
        <Set name="port"><SystemProperty name="jetty.port" default="8070"/></Set>
        <Set name="maxIdleTime">30000</Set>
        <Set name="Acceptors">2</Set>
        <Set name="confidentialPort">8443</Set>
      </New>
  </Arg>
</Call>    

我遇到的错误信息:

java.net.SocketException@3d3c4c09: Address family not supported by protocol family: bind; 
at sun.nio.ch.Net.bind(Native Method)
java.net.SocketException: Address family not supported by protocol family: bind
at sun.nio.ch.Net.bind(Native Method)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:119)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:59)
at org.eclipse.jetty.server.nio.SelectChannelConnector.open(SelectChannelConnector.java:172)
at org.eclipse.jetty.server.AbstractConnector.doStart(AbstractConnector.java:297)
at org.eclipse.jetty.server.nio.SelectChannelConnector.doStart(SelectChannelConnector.java:250)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:58)
at org.eclipse.jetty.server.Server.doStart(Server.java:269)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:58)

我尝试过::1[::1]

如何将Jetty绑定到IPv6地址? Jetty支持IPv6吗?


Jetty 可能在 Java 下运行,使用 preferIPv4Stack=true 禁用了 IPv6。 - Steve-o
@Steve-o 我没有设置这个属性。而且,在之前的测试中,我创建了一个 ServerSocket 来监听 [::1]:9999 ,没有出现任何问题。这与 Java 没有任何关系。 - Thresh
1
你确定吗: http://bugs.sun.com/view_bug.do?bug_id=6230761 - Steve-o
@Steve-o 是的,你说得对。把它作为答案发布,我会接受它。 - Thresh
2个回答

3
如果您还没有找到解决方案,这里有一个。将NIO连接器更改为IO连接器。不使用"org.mortbay.jetty.nio.SelectChannelConnector",而是使用"org.mortbay.jetty.bio.SocketConnector",整个连接器配置如下:
<Call name="addConnector">
  <Arg>
      <New class="org.mortbay.jetty.bio.SocketConnector">
        <Set name="port"><SystemProperty name="jetty.port" default="8070"/></Set>
        <Set name="maxIdleTime">50000</Set>
        <Set name="lowResourceMaxIdleTime">1500</Set>
      </New>
  </Arg>
</Call>

这样,您将能够使用IPv4和IPv6地址访问网页。希望这能有所帮助。

这个答案对这个问题无效。该问题明确使用Jetty 7+(使用org.eclipse.jetty命名空间)。您的答案仅适用于Jetty 6。 - Joakim Erdfelt

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接