0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-15 04:30:25 +00:00

Handle socket errors in HTTP/1.1 and HTTP/2

Doing so will let us notice when the connection is gone instead
of waiting for timeouts, at least in the cases where the remote
socket was closed properly. Timeouts are still needed in case
of TCP half-open problems.

This change means that the order of stream handler commands is
more important than before because socket errors may occur
during the processing of commands.
This commit is contained in:
Loïc Hoguin 2023-12-12 12:05:54 +01:00
parent 3f5f326b73
commit efb681d749
No known key found for this signature in database
GPG key ID: 8A9DF795F6FED764
5 changed files with 197 additions and 127 deletions

View file

@ -84,6 +84,13 @@ the `early_error/5` callback must return a response command.
// @todo The logger option and the {log, Level, Format, Args}
// options need to be documented and tested.
The order in which the commands are given matters. For example,
when sending a response and at the same time creating a new child
process, the first command should be the `spawn` and the second the
`response`. The reason for that is that the sending of the response
may result in a socket error which leads to the termination of
the connection before the rest of the commands are executed.
The following commands are defined:
[[inform_command]]
@ -236,6 +243,8 @@ will end successfully as far as the client is concerned.
To indicate that an error occurred, either use `error_response`
before stopping, or use `internal_error`.
No other command can be executed after the `stop` command.
=== internal_error
Stop the stream with an error.