0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-14 20:30:23 +00:00
cowboy/test/http_handler_long_polling.erl
Loïc Hoguin 40b8d0befc Better handle socket closing with loop handlers
We now read from the socket to be able to detect errors or TCP close
events, and buffer the data if any. Once the data receive goes over
a certain limit, which defaults to 5000 bytes, we simply close the
connection with an {error, overflow} reason.
2013-02-11 09:03:13 +01:00

24 lines
616 B
Erlang

%% Feel free to use, reuse and abuse the code in this file.
-module(http_handler_long_polling).
-behaviour(cowboy_http_handler).
-export([init/3, handle/2, info/3, terminate/3]).
init({_Transport, http}, Req, _Opts) ->
erlang:send_after(500, self(), timeout),
{loop, Req, 5, 5000, hibernate}.
handle(_Req, _State) ->
exit(badarg).
info(timeout, Req, 0) ->
{ok, Req2} = cowboy_req:reply(102, Req),
{ok, Req2, 0};
info(timeout, Req, State) ->
erlang:send_after(500, self(), timeout),
{loop, Req, State - 1, hibernate}.
terminate({normal, shutdown}, _, _) ->
ok;
terminate({error, overflow}, _, _) ->
ok.