anchor.diff:  	Error -> Error
       end.
   	
  -list_opt([{raw,A,B,C}|Opts], R, As) ->
  +list_opt([{raw,A,B,C}|Opts], #listen_opts{} = R, As) ->
       list_opt([{raw,{A,B,C}}|Opts], R, As);
  -list_opt([Opt | Opts], R, As) ->
  +list_opt([Opt | Opts], #listen_opts{} = R, As) ->
       case Opt of
   	{ip,IP}      ->  list_opt(Opts, R#listen_opts { ifaddr = IP }, As);
   	{ifaddr,IP}  ->  list_opt(Opts, R#listen_opts { ifaddr = IP }, As);
  
positive.code: 	Error -> Error
      end.
  
  udp_opt([{raw,A,B,C}|Opts], R, As) ->
      udp_opt([{raw,{A,B,C}}|Opts], R, As);
  udp_opt([Opt | Opts], R, As) ->
      case Opt of
  	{ip,IP}     ->  udp_opt(Opts, R#udp_opts { ifaddr = IP }, As);
  	{ifaddr,IP} ->  udp_opt(Opts, R#udp_opts { ifaddr = IP }, As);
  
negative.code: 	{Name,Val} when is_atom(Name) -> udp_add(Name, Val, R, Opts, As);
  	_ -> {error, badarg}
      end;
  udp_opt([], #udp_opts{} = R, _SockOpts) ->
      {ok, R}.
  
  udp_add(Name, Val, #udp_opts{} = R, Opts, As) ->
      case add_opt(Name, Val, R#udp_opts.opts, As) of
  	{ok, SOpts} ->
  	    udp_opt(Opts, R#udp_opts { opts = SOpts }, As);
  