anchor.diff:           t_simple_local_sockaddr_in6_send_recv/1,
            t_simple_link_local_sockaddr_in6_send_recv/1,
   
  -         otp_18323/1
  +         otp_18323_opts_processing/1,
  +         otp_18323_open/1
   
   	]).
   
  
positive.code:         error : undef ->
              ?P("init_per_group(sockaddr) -> 'socket' not configured"),
              {skip, "esock not configured"}
      end;
  init_per_group(_GroupName, Config) ->
      Config.
  
negative.code:         {error, Reason} ->
              exit(?F("Failed processing options: ~p", [Reason]))
      end.
  
  
  
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  %% Verify that the options [add|drop]_membership do not mess up
  %% the options (including 'ip' which could not be added *after*).
  otp_18323_open(Config) when is_list(Config) ->
      ct:timetrap(?MINS(1)),
      Pre  = fun() ->
                     {ok, Addr} = ?LIB:which_local_addr(inet),
                     #{local_addr => Addr}
             end,
      Case = fun(State) -> do_otp_18323_open(State) end,
      Post = fun(_) -> ok end,
      ?TC_TRY(?FUNCTION_NAME, Pre, Case, Post).
  
  do_otp_18323_open(#{local_addr := Addr}) ->
      ?P("begin"),
  
      ROpts = [binary,
               {add_membership, {Addr,{0,0,0,0}}},
               {ip, Addr},
               {active,false},
               {debug, true}],
      SOpts = [{reuseaddr, true}, binary],
  
      ?P("create received socket"),
      {ok, R}     = gen_udp:open(0, ROpts),
      ?P("extract received socket port"),
      {ok, RPort} = inet:port(R),
  
      ?P("create sender socket"),
      {ok, S} = gen_udp:open(0, SOpts),
  
      ?P("send to receiver (at port ~w)", [RPort]),
      ok = gen_udp:send(S, Addr, RPort, <<"aaaaa">>),
  
      ?P("attempt to receive data on specified format binary)"),
      {ok, {_,_,<<"aaaaa">>}} = gen_udp:recv(R, 0, 200),
  
      ?P("done"),
      ok.
  
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  