diff options
author | Loïc Hoguin <[email protected]> | 2012-12-20 15:57:54 +0100 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2012-12-20 15:57:54 +0100 |
commit | f26401af19bddd74ddd1755041372c737a995b01 (patch) | |
tree | e3683c616282facf936d592ca2d6fd2a578c87da /src | |
parent | 69192a2a3c5fbfa00c3f4fb7b9628512c8ef55ae (diff) | |
download | ranch-f26401af19bddd74ddd1755041372c737a995b01.tar.gz ranch-f26401af19bddd74ddd1755041372c737a995b01.tar.bz2 ranch-f26401af19bddd74ddd1755041372c737a995b01.zip |
Return {error, badarg} if start_listener got a bad transport module
Diffstat (limited to 'src')
-rw-r--r-- | src/ranch.erl | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/ranch.erl b/src/ranch.erl index 3a79312..6d1d5e8 100644 --- a/src/ranch.erl +++ b/src/ranch.erl @@ -47,13 +47,21 @@ %% of connections. %% %% <em>Ref</em> can be used to stop the listener later on. +%% +%% This function will return `{error, badarg}` if and only if the transport +%% module given doesn't appear to be correct. -spec start_listener(any(), non_neg_integer(), module(), any(), module(), any()) - -> {ok, pid()}. + -> {ok, pid()} | {error, badarg}. start_listener(Ref, NbAcceptors, Transport, TransOpts, Protocol, ProtoOpts) when is_integer(NbAcceptors) andalso is_atom(Transport) andalso is_atom(Protocol) -> - supervisor:start_child(ranch_sup, child_spec(Ref, NbAcceptors, - Transport, TransOpts, Protocol, ProtoOpts)). + case erlang:function_exported(Transport, name, 0) of + false -> + {error, badarg}; + true -> + supervisor:start_child(ranch_sup, child_spec(Ref, NbAcceptors, + Transport, TransOpts, Protocol, ProtoOpts)) + end. %% @doc Stop a listener identified by <em>Ref</em>. %% |