3proxy/tests/cases
Vladimir Dubrovin 993c1ef95e Deliver the whole answer to a half-closed client
When the client shuts down its sending side, sockmap() shuts down the
server's in turn, and once the server has answered and closed, poll()
reports a hang-up on its socket. A socket sockmap() had nothing to ask
of at that moment, its buffer being full for a slow client, was still
polled, and a hang-up there ended both directions: whatever of the
answer was still unread in the kernel was dropped and the client got an
end of stream in the middle of it, megabytes short with large answers.

A hang-up on such a socket now only marks it: what is left is read
once the buffer has room, up to the end of the stream as usual. Errors
still end the connection. Since poll() reports a hang-up whatever is
asked, the socket is left out of poll() while nothing is asked of it.
The same holds for the client's side, for an upload cut short after the
server half-closes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 8c87b43a2a)
2026-10-13 12:21:59 +03:00
..
admin.py Tests: wait for the reload requested in the admin case 2026-10-12 13:58:48 +03:00
auto.py http server implemented, pcre support for hostnames in acls implemented 2026-08-29 19:09:54 +03:00
dnspr.py Fix dnspr for Windows 2026-08-26 16:48:09 +03:00
httpsrv_auth.py http server implemented, pcre support for hostnames in acls implemented 2026-08-29 19:09:54 +03:00
httpsrv_files.py http server implemented, pcre support for hostnames in acls implemented 2026-08-29 19:09:54 +03:00
httpsrv_keepalive.py http server implemented, pcre support for hostnames in acls implemented 2026-08-29 19:09:54 +03:00
httpsrv_ops.py http server implemented, pcre support for hostnames in acls implemented 2026-08-29 19:09:54 +03:00
httpsrv_parsing.py http server implemented, pcre support for hostnames in acls implemented 2026-08-29 19:09:54 +03:00
httpsrv_proxypass.py support proxypass in web server 2026-08-29 19:09:54 +03:00
httpsrv_rules.py http server implemented, pcre support for hostnames in acls implemented 2026-08-29 19:09:54 +03:00
ipv6.py http server implemented, pcre support for hostnames in acls implemented 2026-08-29 19:09:54 +03:00
maxconn.py Change waiting loops to semaphores for child counters 2026-10-12 13:58:48 +03:00
parent_failover.py parent: support fraction and % syntaxis for weight; support fallbacks with 0 weight 2026-09-16 20:11:55 +03:00
parent_ports.py Take another local port when the one bound cannot reach the destination 2026-09-17 13:03:15 +03:00
parent_weights.py parent: support fraction and % syntaxis for weight; support fallbacks with 0 weight 2026-09-16 20:11:55 +03:00
pcre.py Fix rewrite and over-long header handling on Windows 2026-08-29 20:37:12 +03:00
portmap.py Deliver the whole answer to a half-closed client 2026-10-13 12:21:59 +03:00
proxy_http.py http server implemented, pcre support for hostnames in acls implemented 2026-08-29 19:09:54 +03:00
socks.py Fix: invalid hostname ACL handling in UDPASSOC 2026-10-01 16:58:28 +03:00
ssl.py http server implemented, pcre support for hostnames in acls implemented 2026-08-29 19:09:54 +03:00
tlspr.py http server implemented, pcre support for hostnames in acls implemented 2026-08-29 19:09:54 +03:00
transparent.py http server implemented, pcre support for hostnames in acls implemented 2026-08-29 19:09:54 +03:00