↑日記で日々積み重ねた情報をトップの「わんこのページ」にまとめています。

おのたく日記 [RDF] YouTubeも始めました→


2009-12-26(Sat) sun-java6-jdkでServerSocketが開けない! [長年日記]

[Debian]sun-java6-jdkでServerSocketが開けない!

webAccess起動せず」を調べていくと、VMwareの使っているTomcatだけではなくて、単純な

import java.net.InetAddress;

import java.net.ServerSocket;

import java.io.IOException;

import java.net.InetSocketAddress;

public class ListenTest {

public static void main(String[] args){

int port = 8005;

ServerSocket serverSocket = null;

InetSocketAddress inetSocketAddress = null;

InetAddress ip = null;

try {

ip = InetAddress.getByName("localhost");

serverSocket =

new ServerSocket(port, 1, ip);

System.out.println("ServerSocket=" + serverSocket );

serverSocket.close();

} catch (IOException e) {

System.err.println("StandardServer.await: create[" + port + "]: " + e);

e.printStackTrace();

System.exit(1);

}

}

}

というJavaのテストプログラムでも

$ java -cp . ListenTest

InetAddress=localhost/127.0.0.1

HostAddress=127.0.0.1

HostName=localhost

StandardServer.await: create[8005]: java.net.SocketException: Invalid argument

java.net.SocketException: Invalid argument

at java.net.PlainSocketImpl.socketBind(Native Method)

at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:336)

at java.net.ServerSocket.bind(ServerSocket.java:336)

at java.net.ServerSocket.(ServerSocket.java:202)

at ListenTest.main(ListenTest.java:xx)

という感じでエラーになる。これはVMwareの問題ではないことが判明。

「new ServerSocket(port, 1, ip);」を「new ServerSocket(port, 1);」とIPアドレス指定なしにすると動作するし、Sun系統のJavaではないgijならば問題なく動く。

なんとなくIPv6周りの問題だと思いながらも中々解決策みつけられなかったけど、「site:bugs.debian.org "java.net.SocketException:"」で検索して、

This setting breaks networking in java, and any traffic will always

result in a "java.net.SocketException: Network is unreachable".

It should probably be an rc-bug, but setting as important for now, since

users can easily rectify the issue.

Quick fix for users hit by this:

sudo sed -i "s/net.ipv6.bindv6only\ =\ 1/net.ipv6.bindv6only\ =\ 0/" \

/etc/sysctl.d/bindv6only.conf && sudo invoke-rc.d procps restart

[Debian Bug report logs - #560044 net.ipv6.bindv6only=1 breaks java networkingより引用]

というのを見つけた。

net.ipv6.bindv6only = 0

[/etc/sysctl.d/bindv6only.confより引用]

とすると

$ java -cp . ListenTest

InetAddress=localhost/127.0.0.1

HostAddress=127.0.0.1

HostName=localhost

ServerSocket=ServerSocket[addr=localhost/127.0.0.1,port=0,localport=8005]

と、ちゃんと動くようになって、VMwareのwebAccessも使えるようになった。

本日のPingbacks(全0件)

Google Web検索 on-o.com内を検索