diff options
author | Loïc Hoguin <[email protected]> | 2019-08-08 16:33:09 +0200 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2019-09-05 11:28:07 +0200 |
commit | c974b4334e7ab660f9bf95653696c3663c02ead3 (patch) | |
tree | 9e501a4928b261c4fe9adc74d80c47b6b14ae50a /doc/src/manual/gun.shutdown.asciidoc | |
parent | 491ddf58c0e14824a741852fdc522b390b306ae2 (diff) | |
download | gun-c974b4334e7ab660f9bf95653696c3663c02ead3.tar.gz gun-c974b4334e7ab660f9bf95653696c3663c02ead3.tar.bz2 gun-c974b4334e7ab660f9bf95653696c3663c02ead3.zip |
Implement graceful shutdown
The graceful shutdown is implemented through a new 'closing'
state. This state is entered under different circumstances
depending on the protocol.
The gun:shutdown/1 function is now implemented and documented.
It allows shutting down the connection gracefully regardless
of the current state of the connection and for all protocols.
The behavior is entirely dependent on the protocol.
For HTTP/1.1 the connection stays up only until after the
current stream is complete; other streams are immediately
canceled.
For HTTP/2 a GOAWAY frame is sent and existing streams
continue to be processed. The connection is closed after
all streams are processed and the server's GOAWAY frame
is received.
For Websocket a close frame is sent. The connection is
closed when receiving the server's close frame.
In all cases the closing_timeout option defines how long
we wait, as a maximum, before closing the connection after
the graceful shutdown was started.
The graceful shutdown is also initiated when the owner
process goes away; when sending an HTTP/1.1 request
with the connection: close header; when receiving an
HTTP/1.1 response with the connection: close header;
when receiving an HTTP/1.0 response without a connection
header; when the server sends a GOAWAY HTTP/2 frame;
or when we send or receive a Websocket close frame.
Along with these changes, the gun:ws_send/2 function
now accepts a list of frames as argument. Those frames
may include a close frame that initiates the graceful
shutdown.
Diffstat (limited to 'doc/src/manual/gun.shutdown.asciidoc')
-rw-r--r-- | doc/src/manual/gun.shutdown.asciidoc | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/doc/src/manual/gun.shutdown.asciidoc b/doc/src/manual/gun.shutdown.asciidoc new file mode 100644 index 0000000..94db39d --- /dev/null +++ b/doc/src/manual/gun.shutdown.asciidoc @@ -0,0 +1,67 @@ += gun:shutdown(3) + +== Name + +gun:shutdown - Gracefully close the connection + +== Description + +[source,erlang] +---- +shutdown(ConnPid) -> ok + +ConnPid :: pid() +---- + +Gracefully close the connection. + +Gun will wait for up to `closing_timeout` milliseconds +before brutally closing the connection. The graceful +shutdown mechanism varies between the different protocols: + +* For HTTP/1.1 there is no such mechanism and Gun will + close the connection once the current response is + received. Any pipelined requests are immediately + terminated. + +* For HTTP/2 Gun will send a GOAWAY frame and wait for + the existing streams to terminate. + +* For Websocket Gun will send a close frame and wait + for the server's close frame before closing the + connection. + +The function returns immediately. The connection may +therefore still be up for some time after this call. + +Gun will not attempt to reconnect once graceful +shutdown has been initiated. + +== Arguments + +ConnPid:: + +The pid of the Gun connection process. + +== Return value + +The atom `ok` is returned. + +== Changelog + +* *2.0*: Function introduced. + +== Examples + +.Gracefully shutdown the connection +[source,erlang] +---- +ok = gun:shutdown(ConnPid). +---- + +== See also + +link:man:gun(3)[gun(3)], +link:man:gun:open(3)[gun:open(3)], +link:man:gun:open_unix(3)[gun:open_unix(3)], +link:man:gun:close(3)[gun:close(3)] |