0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-14 12:20:24 +00:00

Add shutdown_reason Websocket command

This allows changing the normal exit reason of Websocket
processes, providing a way to signal other processes of
why the exit occurred.
This commit is contained in:
Loïc Hoguin 2019-10-10 11:33:35 +02:00
parent cc54c207e3
commit d52e84bdd9
No known key found for this signature in database
GPG key ID: 8A9DF795F6FED764
5 changed files with 87 additions and 6 deletions

View file

@ -52,7 +52,8 @@ init_dispatch(Name) ->
{"/info", ws_info_commands_h, RunOrHibernate},
{"/active", ws_active_commands_h, RunOrHibernate},
{"/deflate", ws_deflate_commands_h, RunOrHibernate},
{"/set_options", ws_set_options_commands_h, RunOrHibernate}
{"/set_options", ws_set_options_commands_h, RunOrHibernate},
{"/shutdown_reason", ws_shutdown_reason_commands_h, RunOrHibernate}
]}]).
%% Support functions for testing using Gun.
@ -286,3 +287,21 @@ websocket_set_options_idle_timeout(Config) ->
after 2000 ->
error(timeout)
end.
websocket_shutdown_reason(Config) ->
doc("The command {shutdown_reason, any()} can be used to "
"change the shutdown reason of a Websocket connection."),
ConnPid = gun_open(Config),
StreamRef = gun:ws_upgrade(ConnPid, "/shutdown_reason", [
{<<"x-test-pid">>, pid_to_list(self())}
]),
{upgrade, [<<"websocket">>], _} = gun:await(ConnPid, StreamRef),
WsPid = receive {ws_pid, P} -> P after 1000 -> error(timeout) end,
MRef = monitor(process, WsPid),
WsPid ! {self(), {?MODULE, ?FUNCTION_NAME}},
receive
{'DOWN', MRef, process, WsPid, {shutdown, {?MODULE, ?FUNCTION_NAME}}} ->
ok
after 1000 ->
error(timeout)
end.