プログラマメモ2 - programmer no memo2

tomcat6でcometで java引数 -Djava.net.preferIPv4Stack=true 2007/10/31

tomcat6から使えるというcometをためしてみました。
環境はmac osxです。

自信がないですが、とりあえずメモです。

下記のようなエラーがでました。


java.net.SocketException: Invalid argument
at sun.nio.ch.Net.setIntOption0(Native Method)
at sun.nio.ch.Net.setIntOption(Net.java:152)
at sun.nio.ch.SocketChannelImpl$1.setInt(SocketChannelImpl.java:372)
at sun.nio.ch.SocketOptsImpl.setInt(SocketOptsImpl.java:46)
at sun.nio.ch.SocketOptsImpl$IP.typeOfService(SocketOptsImpl.java:249)
at sun.nio.ch.OptionAdaptor.setTrafficClass(OptionAdaptor.java:158)
at sun.nio.ch.SocketAdaptor.setTrafficClass(SocketAdaptor.java:330)
at org.apache.tomcat.util.net.SocketProperties.setProperties(SocketProperties.java:171)
at org.apache.tomcat.util.net.NioEndpoint.setSocketOptions(NioEndpoint.java:956)
at org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:1169)
at java.lang.Thread.run(Thread.java:613)




参考サイト
web.paulownia.jp - Comet with Tomcat 6

上記のサイトで、何やら、java起動時の-Dオプションに渡したほうがいいようなことが書いてありためしたら動作しました。
-Djava.net.preferIPv4Stack=true

記述したのは、catlina.shに直接書きました。


export CATALINA_OPTS=-Djava.net.preferIPv4Stack=true (Unix)

して動かしてもいいのかも。

ちなみに
java.net.preferIPv4Stack (デフォルト: false)
IPv6 を利用可能なオペレーティングシステムでは、基本となるネイティブソケットは IPv6 ソケットです。このため、Java(TM) アプリケーションは、IPv4 ホストと IPv6 ホストの両方に接続したり、その両方のホストからの接続を受け入れたりできます。

IPv4 ソケットだけを使用するよう設定されているアプリケーションでは、このプロパティを true に設定できます。 つまり、そのアプリケーションは IPv6 ホストと通信できないということです。 ネットワークのプロパティ


IPv4を優先してくれるということらしい。

参考
【特集】Tomcat 6の実力を早速試す - 移行するべき? その時期は? (16) I/O機能の拡張によるCometのサポート(3) | エンタープライズ | マイコミジャーナル
Apache Tomcat 6.0 - Advanced IO and Tomcat
ネットワークのプロパティ
java.net パッケージの仕組み
2007-01-29 - KazzzのJとNのはざまで - HttpServletRequest#getRemoteAddr()とIPv6 その4 
Apache Tomcat 6.0 - Security Manager HOW-TO

: