mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-06 23:27:04 +02:00
For conveniance, in HTTP muxes (h1 and h2), the end of the stream and the end of the message are reported the same way to the stream, by setting the flag CS_FL_EOS. In the stream-interface, when CS_FL_EOS is detected, a shutdown for read is reported on the channel side. This is historical. With the legacy HTTP layer, because the parsing is done by the stream in HTTP analyzers, the EOS really means a shutdown for read. Most of time, for muxes h1 and h2, it works pretty well, especially because the keep-alive is handled by the muxes. The stream is only used for one transaction. So mixing EOS and EOM is good enough. But not everytime. For now, client aborts are only reported if it happens before the end of the request. It is an error and it is properly handled. But because the EOS was already reported, client aborts after the end of the request are silently ignored. Eventually an error can be reported when the response is sent to the client, if the sending fails. Otherwise, if the server does not reply fast enough, an error is reported when the server timeout is reached. It is the expected behaviour, excpect when the option abortonclose is set. In this case, we must report an error when the client aborts. But as said before, this event can be ignored. So to be short, for now, the abortonclose is broken. In fact, it is a design problem and we have to rethink all channel's flags and probably the conn-stream ones too. It is important to split EOS and EOM to not loose information anymore. But it is not a small job and the refactoring will be far from straightforward. So for now, temporary flags are introduced. When the last read is received, the flag CS_FL_READ_NULL is set on the conn-stream. This way, we can set the flag SI_FL_READ_NULL on the stream interface. Both flags are persistant. And to be sure to wake the stream, the event CF_READ_NULL is reported. So the stream will always have the chance to handle the last read. This patch must be backported to 1.9 because it will be used by another patch to fix the option abortonclose. |
||
---|---|---|
.. | ||
common | ||
import | ||
proto | ||
types |