mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-14 20:30:23 +00:00
Add an accept timeout for code reloading.
Thought it was already there, but I guess not. Anyway it's here now so everything is back to normal. ;)
This commit is contained in:
parent
d4985dd72b
commit
8f818d79df
3 changed files with 15 additions and 13 deletions
|
@ -32,11 +32,13 @@ start_link(LSocket, Transport, Protocol, Opts, ReqsSup) ->
|
||||||
-spec acceptor(LSocket::socket(), Transport::module(),
|
-spec acceptor(LSocket::socket(), Transport::module(),
|
||||||
Protocol::module(), Opts::term(), ReqsSup::pid()) -> no_return().
|
Protocol::module(), Opts::term(), ReqsSup::pid()) -> no_return().
|
||||||
acceptor(LSocket, Transport, Protocol, Opts, ReqsSup) ->
|
acceptor(LSocket, Transport, Protocol, Opts, ReqsSup) ->
|
||||||
case Transport:accept(LSocket) of
|
case Transport:accept(LSocket, 2000) of
|
||||||
{ok, CSocket} ->
|
{ok, CSocket} ->
|
||||||
{ok, Pid} = supervisor:start_child(ReqsSup,
|
{ok, Pid} = supervisor:start_child(ReqsSup,
|
||||||
[CSocket, Transport, Protocol, Opts]),
|
[CSocket, Transport, Protocol, Opts]),
|
||||||
Transport:controlling_process(CSocket, Pid);
|
Transport:controlling_process(CSocket, Pid);
|
||||||
|
{error, timeout} ->
|
||||||
|
ignore;
|
||||||
{error, _Reason} ->
|
{error, _Reason} ->
|
||||||
%% @todo Probably do something here. If the socket was closed,
|
%% @todo Probably do something here. If the socket was closed,
|
||||||
%% we may want to try and listen again on the port?
|
%% we may want to try and listen again on the port?
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
-module(cowboy_ssl_transport).
|
-module(cowboy_ssl_transport).
|
||||||
-export([name/0, messages/0, listen/1, accept/1, recv/3, send/2, setopts/2,
|
-export([name/0, messages/0, listen/1, accept/2, recv/3, send/2, setopts/2,
|
||||||
controlling_process/2, peername/1, close/1]). %% API.
|
controlling_process/2, peername/1, close/1]). %% API.
|
||||||
|
|
||||||
-include("include/types.hrl").
|
-include("include/types.hrl").
|
||||||
|
@ -38,12 +38,12 @@ listen(Opts) ->
|
||||||
{packet, raw}, {reuseaddr, true},
|
{packet, raw}, {reuseaddr, true},
|
||||||
{certfile, CertFile}, {keyfile, KeyFile}, {password, Password}]).
|
{certfile, CertFile}, {keyfile, KeyFile}, {password, Password}]).
|
||||||
|
|
||||||
-spec accept(LSocket::sslsocket())
|
-spec accept(LSocket::sslsocket(), Timeout::timeout())
|
||||||
-> {ok, Socket::sslsocket()} | {error, Reason::closed | timeout | posix()}.
|
-> {ok, Socket::sslsocket()} | {error, Reason::closed | timeout | posix()}.
|
||||||
accept(LSocket) ->
|
accept(LSocket, Timeout) ->
|
||||||
case ssl:transport_accept(LSocket) of
|
case ssl:transport_accept(LSocket, Timeout) of
|
||||||
{ok, CSocket} ->
|
{ok, CSocket} ->
|
||||||
ssl_accept(CSocket);
|
ssl_accept(CSocket, Timeout);
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
{error, Reason}
|
{error, Reason}
|
||||||
end.
|
end.
|
||||||
|
@ -79,10 +79,10 @@ close(Socket) ->
|
||||||
|
|
||||||
%% Internal.
|
%% Internal.
|
||||||
|
|
||||||
-spec ssl_accept(CSocket::sslsocket())
|
-spec ssl_accept(CSocket::sslsocket(), Timeout::timeout())
|
||||||
-> {ok, Socket::sslsocket()} | {error, Reason::closed | timeout | posix()}.
|
-> {ok, Socket::sslsocket()} | {error, Reason::closed | timeout | posix()}.
|
||||||
ssl_accept(CSocket) ->
|
ssl_accept(CSocket, Timeout) ->
|
||||||
case ssl:ssl_accept(CSocket) of
|
case ssl:ssl_accept(CSocket, Timeout) of
|
||||||
ok ->
|
ok ->
|
||||||
{ok, CSocket};
|
{ok, CSocket};
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
-module(cowboy_tcp_transport).
|
-module(cowboy_tcp_transport).
|
||||||
-export([name/0, messages/0, listen/1, accept/1, recv/3, send/2, setopts/2,
|
-export([name/0, messages/0, listen/1, accept/2, recv/3, send/2, setopts/2,
|
||||||
controlling_process/2, peername/1, close/1]). %% API.
|
controlling_process/2, peername/1, close/1]). %% API.
|
||||||
|
|
||||||
-include("include/types.hrl").
|
-include("include/types.hrl").
|
||||||
|
@ -33,10 +33,10 @@ listen(Opts) ->
|
||||||
gen_tcp:listen(Port, [binary, {active, false},
|
gen_tcp:listen(Port, [binary, {active, false},
|
||||||
{packet, raw}, {reuseaddr, true}]).
|
{packet, raw}, {reuseaddr, true}]).
|
||||||
|
|
||||||
-spec accept(LSocket::socket())
|
-spec accept(LSocket::socket(), Timeout::timeout())
|
||||||
-> {ok, Socket::socket()} | {error, Reason::closed | timeout | posix()}.
|
-> {ok, Socket::socket()} | {error, Reason::closed | timeout | posix()}.
|
||||||
accept(LSocket) ->
|
accept(LSocket, Timeout) ->
|
||||||
gen_tcp:accept(LSocket).
|
gen_tcp:accept(LSocket, Timeout).
|
||||||
|
|
||||||
-spec recv(Socket::socket(), Length::integer(), Timeout::timeout())
|
-spec recv(Socket::socket(), Length::integer(), Timeout::timeout())
|
||||||
-> {ok, Packet::term()} | {error, Reason::closed | posix()}.
|
-> {ok, Packet::term()} | {error, Reason::closed | posix()}.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue