You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Arunan Sugunakumar (Jira)" <ji...@apache.org> on 2023/04/18 09:07:00 UTC

[jira] [Commented] (HTTPCORE-740) Connection resets during timeouts

    [ https://issues.apache.org/jira/browse/HTTPCORE-740?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17713491#comment-17713491 ] 

Arunan Sugunakumar commented on HTTPCORE-740:
---------------------------------------------

Hi,

Please find the detailed analysis below.

In httpcore-nio 4.4.13 during a timeout scenario, after the client sends FINACK to the server, the server does not respond with a FINACK and closes the connection with RESET packet after some time. 

!Screenshot 2023-04-18 at 13.45.10.png|width=699,height=192!

In httpcore-nio 4.4.14, after the client sends FINACK to the server, the server promptly sends a FINACK back and closes the connection. I believe this has been fixed due to this fix[1]. The server still has a read mask during the CLOSING state and it reads the FINACK from the client and sends FINACK back before closing the connection gracefully.

!Screenshot 2023-04-18 at 13.44.01.png|width=702,height=163!

In httpcore-nio 4.4.16, again this behavior has broken due to the fix[2]. Since we are no longer listening to the client FINACK during CLOSING state, the server does not respond back with a FINACK and closes the connection gracefully. As a result, a RESET packet gets sent to the client after some time.

!Screenshot 2023-04-18 at 13.43.02.png|width=714,height=124!

 

You can find a reproducer here[3] and the above behavior can be tested with the below curl command.
{code:java}
curl -X POST -k 'https://localhost:8443' -v {code}
[1]- [https://github.com/apache/httpcomponents-core/commit/bf12c7dd9eabf0cd75bd6c70ac6b285b0d4430a5]

[2]- https://github.com/apache/httpcomponents-core/commit/608347c1636a06a9515d326285ac26db0c9c9a4a

[3]- [^HttpNIOTestServer-740.zip]

 

Thanks & Regards,
Arunan

> Connection resets during timeouts
> ---------------------------------
>
>                 Key: HTTPCORE-740
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-740
>             Project: HttpComponents HttpCore
>          Issue Type: Bug
>          Components: HttpCore NIO
>    Affects Versions: 4.4.16
>            Reporter: Arunan Sugunakumar
>            Priority: Major
>         Attachments: HttpNIOTestServer-740.zip, Screenshot 2023-04-18 at 07.53.12.png, Screenshot 2023-04-18 at 13.43.02.png, Screenshot 2023-04-18 at 13.44.01.png, Screenshot 2023-04-18 at 13.45.10.png
>
>
> We observed an issue where with a httpcore-nio server timeout scenario, the server sends a FINACK to the client and if the client sends a close_notify alert, the server is immediately sending a RESET and closing the connection. Ideally, the server should also send a close_notify and terminate the connection gracefully. This issue is observed with only the clients which send close_notify for a server FINACK. The below attached is a TCP capture during the timeout scenario (server port: 8253).  The server uses the latest 4.4.16 httpcore-nio library.
> !Screenshot 2023-04-18 at 07.53.12.png|width=1466,height=150!
> Is there any way to avoid this scenario and send a close_notify from the server as well to terminate the connection gracefully? 
> PS: I am currently working on a simple reproducer to attach here, and I'll attach it as soon as possible. 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org