anchor.diff:  -define(DEFAULT_TIMEOUT, timer:seconds(60)).
   
   %%====================================================================
  +
  +%% @doc Start the Manager process
  +%% @end
   start_link() ->
       gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
   
  +%% @doc Announce as announce(Tr, PL, Timeout) with 60 sec timeout.
  +%% @end
   announce(Tr, PL) ->
       announce(Tr, PL, timer:seconds(60)).
   
  +
  +%% @doc Announce to the tracker.
  +%%   <p>PL contains the announce data, Tr is a {IP, Port} tracker
  +%%   pair, and Timeout is the timeout.</p>
  +%%   <p>The will block the caller</p>
  +%% @end
  +%% @todo Describe the announce data
   announce({IP, Port}, PropList, Timeout) ->
       case catch gen_server:call(?MODULE, {announce, {IP, Port}, PropList}, Timeout) of
   	{'EXIT', {timeout, _}} ->
  
positive.code: 	    {ok, Pid}
      end.
  
  reg_connid_gather(Tracker) ->
      ets:insert(?TAB, [{{conn_id_req, Tracker}, self()},
  		      {self(), {conn_id_req, Tracker}}]).
  
  reg_tr_id(Tid) ->
      true = ets:insert(?TAB, [{Tid, self()}, {self(), Tid}]).
  
  unreg_tr_id(Tid) ->
      [true] = delete_object(?TAB, [{Tid, self()}, {self(), Tid}]).
  
  reg_announce(Tracker, PL) ->
      true = ets:insert(?TAB, [{{announce, Tracker}, self()},
  			     {{Tracker, PL}, self()},
  			     {self(), {Tracker, PL}}]).
  
  reg_connid(Tracker, ConnID) ->
      ets:insert(?TAB, [{{conn_id, Tracker}, ConnID}]).
  
  msg(Tr, M) ->
      gen_server:cast(?MODULE, {msg, Tr, M}).
  
  %%====================================================================
  init([]) ->
      ets:new(?TAB, [named_table, public, {keypos, 1}, bag]),
      {ok, Port} = application:get_env(etorrent, udp_port),
      {ok, Socket} = gen_udp:open(Port, [binary, {active, true}, inet, inet6]),
      {ok, #state{ socket = Socket }}.
  
  handle_call({announce, Tracker, PL}, From, S) ->
      case ets:lookup(?TAB, {conn_id, Tracker}) of
  	[] ->
  
negative.code:     Reply = ok,
      {reply, Reply, State}.
  
  %% @private
  handle_cast({need_requestor, Tracker, N}, S) ->
      case ets:lookup(?TAB, {conn_id_req, Tracker}) of
  	[] ->
  