[
https://issues.apache.org/jira/browse/HTTPCLIENT-1060?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12998754#comment-12998754
]
Glory Chen commented on HTTPCLIENT-1060:
----------------------------------------
The issue didn't reproduce in the JSE environment after replace the
PlainSocketImpl with the apache harmony library.
After compared the org.apache.harmony.luni native implementation between apache
download package and android system, and I found Android Froyo version will
have this issue but Android Gingerbread version already fixed this issue.
Thanks Oleg's comments.
> Http abort API is not working as expected.
> ------------------------------------------
>
> Key: HTTPCLIENT-1060
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1060
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Components: HttpClient
> Affects Versions: 4.0.3
> Environment: Ubuntu, Android platform and Android Phone
> Reporter: Glory Chen
>
> I'm testing a case related to abort a HttpGet request.
> When call HttpGet.abort() method, Http request cannot be aborted immediately
> in the receiveResponseHeader step.
> Here's the log for the case.
> 02-16 11:21:58.643: INFO/System.out(2601): HttRequestEexecutor
> doSendRequest() End
> 02-16 11:21:58.643: INFO/System.out(2601): HttpRequestExecutor
> doReceiveResponse() begin
> 02-16 11:21:58.643: INFO/System.out(2601): HttpRequestExecutor
> doReceiveResponse() conn.receiveResponseHeader()
> 02-16 11:21:58.643: INFO/System.out(2601):
> AbstractSessionInputBuffer.fillBuffer() instream.read() begin
> 02-16 11:21:59.010: WARN/TestHttpStack(2601): Abort the http request!
> 02-16 11:21:59.010: INFO/System.out(2601): HttpRequestBase abort()
> localTrigger.abortconnection()
> 02-16 11:21:59.010: INFO/System.out(2601): DefaultClientConnection
> shutdown(): Connection shut down
> 02-16 11:21:59.010: INFO/System.out(2601): SocketHttpClientConnection
> shutdown()
> 02-16 11:21:59.010: INFO/System.out(2601): SocketHttpClientConnection
> shutdown() close the socket!
> 02-16 11:21:59.010: INFO/System.out(2601): DefaultClientConnection shutdown()
> check sock and sock.close()
> 02-16 11:21:59.010: DEBUG/TestHttpStack(2601): Abort Done!
> 02-16 11:22:28.674: INFO/System.out(2601): DefaultRequestDirector execute()
> catch exception: null
> 02-16 11:22:28.674: WARN/System.err(2601): java.net.SocketTimeoutException
> 02-16 11:22:28.674: WARN/System.err(2601): at
> org.apache.harmony.luni.net.PlainSocketImpl.read(PlainSocketImpl.java:564)
> 02-16 11:22:28.674: WARN/System.err(2601): at
> org.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:88)
> 02-16 11:22:28.674: WARN/System.err(2601): at
> org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:104)
> 02-16 11:22:28.674: WARN/System.err(2601): at
> org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:193)
> 02-16 11:22:28.674: WARN/System.err(2601): at
> org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:82)
> 02-16 11:22:28.674: WARN/System.err(2601): at
> org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:174)
> 02-16 11:22:28.674: WARN/System.err(2601): at
> org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:179)
> 02-16 11:22:28.674: WARN/System.err(2601): at
> org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:238)
> 02-16 11:22:28.674: WARN/System.err(2601): at
> org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259)
> 02-16 11:22:28.674: WARN/System.err(2601): at
> org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:289)
> 02-16 11:22:28.674: WARN/System.err(2601): at
> org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121)
> 02-16 11:22:28.674: WARN/System.err(2601): at
> org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:423)
> 02-16 11:22:28.674: WARN/System.err(2601): at
> org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
> 02-16 11:22:28.674: WARN/System.err(2601): at
> org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
> 02-16 11:22:28.690: WARN/System.err(2601): at
> org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
> 02-16 11:22:28.698: WARN/System.err(2601): at
> com.mustardcy.test.httpstack.TestHttpStack.postRequest(TestHttpStack.java:258)
> 02-16 11:22:28.698: WARN/System.err(2601): at
> com.mustardcy.test.httpstack.TestHttpStack.sendHttpRequest(TestHttpStack.java:160)
> 02-16 11:22:28.698: WARN/System.err(2601): at
> com.mustardcy.test.httpstack.TestHttpStack.access$0(TestHttpStack.java:155)
> 02-16 11:22:28.698: WARN/System.err(2601): at
> com.mustardcy.test.httpstack.TestHttpStack$SendHttpRequest.run(TestHttpStack.java:149)
> The exception was caught 30s after when abort() was called.
> I updated the code in DefaultClientConnection.opening(),
> DefaultClientConnection.shutdown() and SocketHttpClientConnection.shutdown()
> to call sock.shutdownInput() before sock.close(), and found the exception can
> be caught immediately after abort() is called.
> I'm not sure whether the fix is correct. So I submitted a issue to get help.
> And has the latest HttpClient package fixed this issue?
> Same issue is found in HttpPost.abort() case. My fix is let
> sock.shutdownOutput() called before sock.close().
> Thanks.
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]