anchor.diff:        %% exit instead of {error, Reason}
         %% otherwise exit reason will be 'normal'
         exit(Reason)
  +  end.
  +
  +system_call(Pid, Request) ->
  +  Mref = erlang:monitor(process, Pid),
  +  Ref = erlang:make_ref(),
  +  erlang:send(Pid, {system, {self(), Ref}, Request}),
  +  receive
  +    {Ref, Reply} ->
  +      erlang:demonitor(Mref, [flush]),
  +      Reply;
  +    {'DOWN', Mref, _, _, Reason} ->
  +      {error, {sock_down, Reason}}
     end.
   
   call(Pid, Request) ->
  
positive.code:         , start/5
          , start_link/5
          , stop/1
          ]).
  
  %% system calls support for worker process
  
negative.code: -spec get_tcp_sock(pid()) -> {ok, port()}.
  get_tcp_sock(Pid) ->
    call(Pid, get_tcp_sock).
  
  -spec debug(pid(), print | string() | none) -> ok.
  %% @doc Enable/disable debugging on the socket process.
  %%      debug(Pid, pring) prints debug info on stdout
  %%      debug(Pid, File) prints debug info into a File
  %%      debug(Pid, none) stops debugging
  debug(Pid, none) ->
    system_call(Pid, {debug, no_debug});
  debug(Pid, print) ->
    system_call(Pid, {debug, {trace, true}});
  debug(Pid, File) when is_list(File) ->
    system_call(Pid, {debug, {log_to_file, File}}).
  
  %%%_* Internal functions =======================================================
  init(Parent, Host, Port, ClientId, Debug0) ->
  