anchor.diff:                  {ok, [[FdStr]] = Badarg} when is_list(FdStr) ->
                       case catch list_to_integer(FdStr) of
                           Fd when is_integer(Fd) ->
  -                            [{fd, Fd} | UdpOptions];
  +                            {0, [{fd, Fd} | lists:keydelete(ip, 1, UdpOptions)]};
                           {'EXIT', _} ->
                               Text = lists:flatten(io_lib:format("Illegal prebound fd ~p: ~p", [InitArg, Badarg])),
                               print_debug_info(Config, daemon, open, ?ERROR(open, undef, Text, "")),
  
positive.code: daemon_init(Config) when is_record(Config, config), 
                           is_pid(Config#config.parent_pid) ->
      process_flag(trap_exit, true),
      UdpOptions = prepare_daemon_udp(Config),
      case catch gen_udp:open(Config#config.udp_port, UdpOptions) of
          {ok, Socket} ->
              {ok, ActualPort} = inet:port(Socket),
              proc_lib:init_ack({ok, self()}),
  
negative.code:     case lists:keymember(fd, 1, UdpOptions) of
          true ->
              %% Use explicit fd
              {Port, UdpOptions};
          false ->
              %% Use fd from setuid_socket_wrap, such as -tftpd_69
              InitArg = list_to_atom("tftpd_" ++ integer_to_list(Port)),
  