The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • My badges

  • Twitter Updates

  • My Flickr Stream

  • Pages

  • All categories

  • Enter your email address to subscribe to this blog and receive notifications of new posts by email.

    Join 2,909 other followers

Research list: haproxy and Connection: close

Posted by jpluimers on 2019/09/24

At a site, haproxy was configured like this for a particular back-end:

backend http_FUNCTIONALITY_cluster
    log global
    mode http
# default httpchk checks / which for our functionality intentionally returns 500 causing haproxy to think it's down
#   option httpchk
# FUNCTIONALITY has a /FUNCTIONALITY which returns a 200 OK
    option httpchk get /FUNCTIONALITY
    http-check expect ! rstatus ^5
    option http-keep-alive
    option forwardfor
    server w7connexxion cookie FUNCTIONALITYA check

The /FUNCTIONALITY would return a multi-kilobyte result.

The HAproxy would send the request with this body:

Connection: close

In the midst of the server returning an http request of more than one TCP frame:

Connection: close
Content-Type: text/html; charset=utf-8
Content-Length: 4068
Date: Mon, 20 Nov 2017 08:17:02 GMT

<html><head><META ...

, the HAproxy would kill the connection, resulting in a 10054 error on Windows, which [WayBack] Windows Sockets Error Codes indicates it is this:

Connection reset by peer.

An existing connection was forcibly closed by the remote host. This normally results if the peer application on the remote host is suddenly stopped, the host is rebooted, the host or remote network interface is disabled, or the remote host uses a hard close (see setsockopt for more information on the SO_LINGER option on the remote socket). This error may also result if a connection was broken due to keep-alive activity detecting a failure while one or more operations are in progress. Operations that were in progress fail with WSAENETRESET. Subsequent operations fail with WSAECONNRESET.

So both sides are right in that they will close the connection (despite the HTTP keep alive): [WayBack] What does “Connection: close” means when used in the response message?

Howver, I think HAproxy is way too soon closing the connection, especially as it does not use the configured keep alive ([WayBack] How to make HA Proxy keepalive and [WayBack] Hypertext Transfer Protocol — HTTP/1.1 RFC 2616 = 14 Header Field Definitions – 14.10 Connection).

The 10054 would end up in the Windows Event Log for Applications like this:

The description for Event ID 0 from source MyFunctionality.exe cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer.

If the event originated on another computer, the display information had to be saved with the event.

The following information was included with the event: 

Socket Error # 10054
Connection reset by peer.

In the mean time, we shortened the result, so it does not fail any more.

Later I hope to find some time to do more research on this, for which I hope [WayBack] Health checking – HAProxy Technologies is a base.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: