私はApache HttpComponents 4.4.1 でアプリケーションを持っています。複数のHTTP "services"を実行するは、それぞれ別のポートでHTTPサーバーを起動します。ユーザがサービスを停止することを決定したとき、私はこのコードで、このポート上で実行されているHTTPサーバのシャットダウン:Apache HTTPコンポーネントをシャットダウンする適切な方法HTTPサーバーをブロックする
org.apache.http.impl.bootstrap.HttpServer server;
....
public void stopServer(){
server.shutdown(42, TimeUnit.MICROSECONDS);
}
I Linux上で次のような問題があります開いたキープアライブ接続がある場合(要求がありません処理)、これらのソケットは閉じられません。のみのServerSocketを閉じている:
netstat -aon | grep 58276
TCP 127.0.0.1:50658 127.0.0.1:58276 ESTABLISHED 18012
TCP 127.0.0.1:58276 127.0.0.1:50658 ESTABLISHED 18012
BindingExceptionがスローされているのと同じポート上で再びHTTPサーバを起動しようとする試みには:
Caused by: java.net.BindException: Address already in use
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.socketBind(PlainSocketImpl.java:521)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:414)
at java.net.ServerSocket.bind(ServerSocket.java:326)
at java.net.ServerSocket.<init>(ServerSocket.java:192)
at javax.net.DefaultServerSocketFactory.createServerSocket(ServerSocketFactory.java:170)
at org.apache.http.impl.bootstrap.HttpServer.start(HttpServer.java:116)
Windows上で動作は同じである、しかしBindingExceptionと何がありませんサーバーはプロセス要求を問題なく開始します。
問題を再現したテストケースをまとめて、JIRAをhttps://issues.apache.org/jira/で作成してください。 – oleg