anchor.diff:      {null, anon}.
   
   start_or_recv_cancel_timer(infinity, _RecvFrom) ->
  -    ok;
  +    undefined;
   start_or_recv_cancel_timer(Timeout, RecvFrom) ->
       erlang:send_after(Timeout, self(), {cancel_start_or_recv, RecvFrom}).    
  +
  +cancel_timer(undefined) ->
  +    ok;
  +cancel_timer(Timer) ->
  +    erlang:cancel_timer(Timer).
   
   handle_unrecv_data(StateName, #state{socket = Socket, transport_cb = Transport} = State) ->
       inet:setopts(Socket, [{active, false}]),
  
positive.code:     end.
  
  read_application_data(Data, #state{user_application = {_Mon, Pid},
                                socket_options = SOpts,
                                bytes_to_read = BytesToRead,
                                start_or_recv_from = RecvFrom,
                                user_data_buffer = Buffer0} = State0) ->
      Buffer1 = if 
  		  Buffer0 =:= <<>> -> Data;
  		  Data =:= <<>> -> Buffer0;
  
negative.code:      get_timeout(State)};
  
  handle_sync_event({start, Timeout}, StartFrom, hello, State) ->
      Timer = start_or_recv_cancel_timer(Timeout, StartFrom),
      hello(start, State#state{start_or_recv_from = StartFrom,
  			     timer = Timer});
  
  %% The two clauses below could happen if a server upgrades a socket in
  %% active mode. Note that in this case we are lucky that
  