From f7d44f88f141898ae5e0c118756e75b4809040c6 Mon Sep 17 00:00:00 2001 From: Feng Lee Date: Wed, 22 Apr 2015 00:14:52 +0800 Subject: [PATCH] close listeners --- apps/emqttd/src/emqttd.erl | 23 ++++++++++++++++++----- apps/emqttd/src/emqttd_app.erl | 8 +++++--- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/apps/emqttd/src/emqttd.erl b/apps/emqttd/src/emqttd.erl index f118272e8..b8a3e1e47 100644 --- a/apps/emqttd/src/emqttd.erl +++ b/apps/emqttd/src/emqttd.erl @@ -26,9 +26,9 @@ %%%----------------------------------------------------------------------------- -module(emqttd). --author('feng@emqtt.io'). +-author("Feng Lee "). --export([start/0, open/1, is_running/1]). +-export([start/0, open/1, close/1, is_running/1]). -define(MQTT_SOCKOPTS, [ binary, @@ -41,15 +41,17 @@ -type listener() :: {atom(), inet:port_number(), [esockd:option()]}. %%------------------------------------------------------------------------------ -%% @doc -%% Start emqttd application. -%% +%% @doc Start emqttd application. %% @end %%------------------------------------------------------------------------------ -spec start() -> ok | {error, any()}. start() -> application:start(emqttd). +%%------------------------------------------------------------------------------ +%% @doc Open Listeners +%% @end +%%------------------------------------------------------------------------------ -spec open([listener()] | listener()) -> any(). open(Listeners) when is_list(Listeners) -> [open(Listener) || Listener <- Listeners]; @@ -72,6 +74,17 @@ open(Protocol, Port, Options) -> MFArgs = {emqttd_client, start_link, [PktOpts]}, esockd:open(Protocol, Port, emqttd_opts:merge(?MQTT_SOCKOPTS, Options) , MFArgs). +%%------------------------------------------------------------------------------ +%% @doc Close Listeners +%% @end +%%------------------------------------------------------------------------------ +-spec close([listener()] | listener()) -> any(). +close(Listeners) when is_list(Listeners) -> + [close(Listener) || Listener <- Listeners]; + +close({Protocol, Port, _Options}) -> + esockd:close({Protocol, Port}). + is_running(Node) -> case rpc:call(Node, erlang, whereis, [emqttd]) of {badrpc, _} -> false; diff --git a/apps/emqttd/src/emqttd_app.erl b/apps/emqttd/src/emqttd_app.erl index b798f1061..ffd9d4649 100644 --- a/apps/emqttd/src/emqttd_app.erl +++ b/apps/emqttd/src/emqttd_app.erl @@ -51,7 +51,7 @@ start(_StartType, _StartArgs) -> emqttd_mnesia:start(), {ok, Sup} = emqttd_sup:start_link(), start_servers(Sup), - {ok, Listeners} = application:get_env(listen), + {ok, Listeners} = application:get_env(listeners), emqttd:open(Listeners), register(emqttd, self()), print_vsn(), @@ -127,13 +127,15 @@ supervisor_spec(Name, Opts) -> worker_spec(Name) -> {Name, {Name, start_link, []}, - permanent, 5000, worker, [Name]}. + permanent, 10000, worker, [Name]}. worker_spec(Name, Opts) -> {Name, {Name, start_link, [Opts]}, - permanent, 5000, worker, [Name]}. + permanent, 10000, worker, [Name]}. -spec stop(State :: term()) -> term(). stop(_State) -> + {ok, Listeners} = application:get_env(listeners), + emqttd:close(Listeners), ok.