[ 
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]

Reply via email to