java.net.SocketException:套接字在CentOS(Linux)上关闭

java.net.SocketException:套接字在CentOS(Linux)上关闭,java,linux,sockets,proxy,Java,Linux,Sockets,Proxy,我有一个java应用程序,它使用一个内部代理服务器来分析浏览器中web应用程序的http流量——Prism或Chrome/Chromium,这实际上是同一个应用程序的一部分。根据流量分析,它执行一些操作 该应用程序在WindowsXP、7和8中运行良好,我也在Ubuntu和Suse中使用它,没有任何问题。最近,一个新的潜在客户希望在CentOs中对其进行测试,但我得到了java.net.SocketException:socketclosed。 以下代码生成此异常并实现可运行: publi

我有一个java应用程序,它使用一个内部代理服务器来分析浏览器中web应用程序的http流量——Prism或Chrome/Chromium,这实际上是同一个应用程序的一部分。根据流量分析,它执行一些操作

该应用程序在WindowsXP、7和8中运行良好,我也在Ubuntu和Suse中使用它,没有任何问题。最近,一个新的潜在客户希望在CentOs中对其进行测试,但我得到了java.net.SocketException:socketclosed。 以下代码生成此异常并实现可运行:

   public void run() {
    try {
        // create a server socket, and loop forever listening for
        // client connections
        synchronized (this) {
            server = new ServerSocket(thisPort);
            notifyAll();
        }
        while (true) {
            if(server.isClosed()){ // I added this just to see if it helps...
                server = new ServerSocket(thisPort);
            }
            Socket client = server.accept();  // Exception thrown here

            ProxyThread t = new ProxyThread(client, fwdServer, fwdPort); // new Thread takes care of comunication, no issues there at all...
            t.setDebug(debugLevel, debugOut);
            t.setTimeout(ptTimeout);
            t.start();
        }
    } catch (Exception e) {
            debugOut.println("Proxy Thread error: " + e);
            e.printStackTrace();

    }

    closeSocket();
}
跟踪:

java.net.SocketException: Socket closed
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.AbstractPlainSocketImpl.accept(Unknown Source)
    at java.net.ServerSocket.implAccept(Unknown Source)
    at java.net.ServerSocket.accept(Unknown Source)
    at sk.tido.simpleproxy.Proxy.run(Proxy.java:20)
系统信息:

CentOS release 6.3 (Final)
Linux pcpanel 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
我用两个版本的java namelly对其进行了测试:

java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)

java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.1) (rhel-1.45.1.11.1.el6-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode
欢迎任何建议,因为该应用程序在其他Linux发行版上已经运行了近2,5年,没有任何问题。。。
我只能找到与my类似的问题,但与网络上的httpclient相关,这对我没有多大帮助。

当此代码在accept中被阻止时,您正在关闭应用程序中其他位置的ServerSocket。

您的回答让我从其他整体角度来研究代码。我发现另一个线程关闭了套接字。但这不是我的代码中的错误,它是按设计工作的。后来我发现这个平台上的Chromium有一个问题,它不会从那里开始。因此我的代码无法启动它,负责检查浏览器是否正在运行的线程结束了代理线程关闭套接字。然后整个应用程序正常关闭。。。我在错误的地方寻找一只虫子,我没想到铬可能是个问题。。。