Привязать Jetty к IPv6-адресу

Я пытаюсь связать Jetty для прослушивания только IPv6-адреса. Я использую Jetty 7.4.2.v20110526.

мой причал.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-адресу? Поддерживается ли IPv6 Jetty вообще?


person Thresh    schedule 11.08.2011    source источник
comment
Jetty может работать под управлением Java с параметром preferIPv4Stack=true, который отключает IPv6.   -  person Steve-o    schedule 11.08.2011
comment
@ Стив-о, я не устанавливал это свойство. А ранее в тестах я создаю ServerSocket, который без проблем слушает [::1]:9999. Ява тут ни при чем.   -  person Thresh    schedule 11.08.2011
comment
вы уверены: bugs.sun.com/view_bug.do?bug_id=6230761   -  person Steve-o    schedule 11.08.2011
comment
@Steve-o Да, ты прав. Опубликуйте это как ответ, и я приму его.   -  person Thresh    schedule 11.08.2011


Ответы (2)


Если вы не нашли решение, вот оно. Замените разъем 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-адрес. Надеюсь это поможет.

person Boyan    schedule 20.10.2011
comment
Этот ответ недействителен для вопроса. В вопросе явно используется Jetty 7+ (с пространством имен org.eclipse.jetty). Ваш ответ действителен только для Jetty 6. - person Joakim Erdfelt; 17.01.2013

Старые версии Sun JRE не поддерживают IPv6 на каналах NIO, поэтому просто обновите JVM.

http://bugs.sun.com/view_bug.do?bug_id=6230761

person Steve-o    schedule 12.08.2011