[
https://issues.apache.org/jira/browse/HTTPCORE-420?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15221421#comment-15221421
]
Anton Krosnev commented on HTTPCORE-420:
----------------------------------------
The problem is actually in org.apache.http.impl.bootstrap.Worker.run(). The
Worker thread is supposed to be stopped by Thread.interrupted() when
server.shutdown is called, but it blocks on socket.read() after the response is
returned, check the stack below. Worker threads remain in this state until the
connection is closed or new request is sent via the same socket or the JVM is
terminated.
{quote}
Thread [HTTP-worker-1] (Suspended)
org.apache.http.impl.DefaultBHttpServerConnection.receiveRequestHeader() line:
132
org.apache.http.protocol.HttpService.handleRequest(org.apache.http.HttpServerConnection,
org.apache.http.protocol.HttpContext) line: 307
org.apache.http.impl.bootstrap.Worker.run() line: 66
java.util.concurrent.ThreadPoolExecutor.runWorker(java.util.concurrent.ThreadPoolExecutor$Worker)
line: 1142
java.util.concurrent.ThreadPoolExecutor$Worker.run() line: 617
java.lang.Thread.run() line: 745
{quote}
> Connections left open after HTTP synchronous server shutdown
> ------------------------------------------------------------
>
> Key: HTTPCORE-420
> URL: https://issues.apache.org/jira/browse/HTTPCORE-420
> Project: HttpComponents HttpCore
> Issue Type: Bug
> Components: HttpCore
> Affects Versions: 4.4.3
> Environment: java version "1.8.0_65"
> Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
> Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)
> Linux 3.0.101-0.47.71-default #1 SMP Thu Nov 12 12:22:22 UTC 2015 (b5b212e)
> x86_64 x86_64 x86_64 GNU/Linux
> Reporter: Anton Krosnev
> Assignee: Oleg Kalnichevski
> Fix For: 4.4.5
>
>
> I have observed the following problem on Linux with Apache HttpComponents
> 4.4.1 synchronous server: After calling server.shutdown(42,
> TimeUnit.MICROSECONDS), if there are Keep-alive connections opened (there is
> no request processing), these sockets are not closed. Only ServerSocket is
> closed:
> {quote}
> 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
> {quote}
> In attempt to start again HTTP server on the same port a BindingException is
> thrown:
> {quote}
> 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)
> {quote}
> On Windows the behavior is the same , however there is no BindingException
> and the server starts process requests without any problems.
> One can reproduce the problem using example code from
> https://github.com/anton-k11/apache-tests/tree/master
> # Start the server and the client.
> # Client will send several requests to the server.
> #* Client will open 2 connections to the server.
> # After 1 min. the server will be shutdown.
> #* Check the open connections on port 9090, the 2 connections between client
> and server are still open.
> # After 1 min. a new Server is started on the same port 9090.
> #* On Linux this brakes with:
> {quote}
> java.net.BindException: Address already in use
> at java.net.PlainSocketImpl.socketBind(Native Method)
> at
> java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
> at java.net.ServerSocket.bind(ServerSocket.java:375)
> at java.net.ServerSocket.<init>(ServerSocket.java:237)
> at
> javax.net.DefaultServerSocketFactory.createServerSocket(ServerSocketFactory.java:231)
> at
> org.apache.http.impl.bootstrap.HttpServer.start(HttpServer.java:116)
> at
> org.apache.http.examples.server.TestHttpServer.main(TestHttpServer.java:49)
> {quote}
> #* On Windows this work just fine and the server is started successfully.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]