anchor.diff:  'CONNECT'(timeout, #fsm{peer={Host, Port}, opts=Opts} = S) ->
      % socket connect timeout
      T  = proplists:get_value(timeout, S#fsm.opts, ?T_CONNECT),    
  -   % TODO: overwrite default sock opts with user 
      T1 = erlang:now(),
  -   case gen_tcp:connect(check_host(Host), Port, ?SOCK_OPTS ++ Opts, T) of
  +   case gen_tcp:connect(check_host(Host), Port, opts(Opts, ?TCP_OPTS) ++ ?SOCK_OPTS, T) of
         {ok, Sock} ->
            {ok, Peer} = inet:peername(Sock),
            {ok, Addr} = inet:sockname(Sock),
  
positive.code: check_host(Host) ->
     Host.   
  
  %%%------------------------------------------------------------------   
  %%%
  %%% ctrl
  %%%
  %%%------------------------------------------------------------------
  
  %%
  %% konduit ioctrl
  ioctrl(address, S) ->
     {{S#fsm.addr, S#fsm.peer}, S};
  
  ioctrl(socket, S) ->
     {S#fsm.sock, S};
  
  ioctrl(_, S) ->
     {nil, S}.
     
  
  
negative.code:    {ok, LSock} = gen_tcp:listen(Port, [
        Inet, 
        {ip, IP}, 
        {reuseaddr, true} | opts(Opts, ?TCP_OPTS) ++ ?SOCK_OPTS
     ]),
     pns:register(knet, {iid(Inet), listen, Addr}, self()),
     lager:info("tcp/ip listen on ~p", [Addr]),
  