anchor.diff:  %%
   
   -module(tcp_listener).
  +
  +-include("emqtt.hrl").
   
   -behaviour(gen_server).
   
  
positive.code:                           end,
                            lists:duplicate(ConcurrentAcceptorCount, dummy)),
              {ok, {LIPAddress, LPort}} = inet:sockname(LSock),
              error_logger:info_msg(
                "started ~s on ~s:~p~n",
                [Label, ntoab(LIPAddress), LPort]),
              apply(M, F, A ++ [IPAddress, Port]),
              {ok, #state{sock = LSock,
                          on_startup = OnStartup, on_shutdown = OnShutdown,
                          label = Label}};
          {error, Reason} ->
              error_logger:error_msg(
                "failed to start ~s on ~s:~p - ~p (~s)~n",
                [Label, ntoab(IPAddress), Port,
                 Reason, inet:format_error(Reason)]),
              {stop, {cannot_listen, IPAddress, Port, Reason}}
      end.
  
  
negative.code: terminate(_Reason, #state{sock=LSock, on_shutdown = {M,F,A}, label=Label}) ->
      {ok, {IPAddress, Port}} = inet:sockname(LSock),
      gen_tcp:close(LSock),
      ?ERROR("stopped ~s on ~s:~p~n",
             [Label, ntoab(IPAddress), Port]),
      apply(M, F, A ++ [IPAddress, Port]).
  
  code_change(_OldVsn, State, _Extra) ->
  