anchor.diff:  
   -ifdef(USE_ESOCK).
   if_names() ->
  -    prim_net:if_names().
  +    try prim_net:if_names() of
  +        Result ->
  +            Result
  +    catch
  +        error : notsup : Stack ->
  +            %% This is *most likely* Windows, so try that.
  +            %% If not (another catch), raise the original catched error.
  +            try win_gaa_names()
  +            catch
  +                _:_:_ ->
  +                    erlang:raise(error, notsup, Stack)
  +            end
  +    end.
   -else.
   if_names() ->
       erlang:error(notsup).
   -endif.
   
   
  +win_gaa_names() ->
  +    %% Flags  = prim_net:get_adapters_addresses_flags_default(),
  +    %% Flags2 = Flags#{skip_unicast       => true,
  +    %%                 skip_friendly_name => false,
  +    %%                 include_prefix     => false},
  +    case prim_net:get_adapters_addresses(#{flags => ?GAA_NAMES_FLAGS()}) of
  +        {ok, GAA} ->
  +            Names = [{Idx, FName} ||
  +                        #{index := Idx, friendly_name := FName} <- GAA],
  +            {ok, lists:keysort(1, Names)};
  +        {error, _} = ERROR ->
  +            ERROR
  +    end.
  
positive.code: %%
  %%
  
  -spec if_names() -> Names | {error, Reason} when
        Names  :: [{Idx, If}],
        Idx    :: network_interface_index(),
        If     :: network_interface_name(),
  
negative.code:                                      address  := socket:sockaddr()}.
  -type network_interface_name()  :: string().
  -type network_interface_index() :: non_neg_integer().
  
  
  -define(GAA_NAMES_FLAGS(),
          #{skip_unicast       => true,
            skip_friendly_name => false,
            include_prefix     => false}).
  
  
  
  %% ===========================================================================
  