Search code examples
c#dnsgethostbyname

Difference between GetHostEntry and GetHostByName?


On MSDN it mentions GetHostByName is obsolete. The replacement is GetHostEntry. What are their difference?


Solution

  • It looks like GetHostEntry does a little more error checking and also supports Network Tracing

    GetHostByName Decompiled:

    public static IPHostEntry GetHostByName(string hostName)
    {
      if (hostName == null)
        throw new ArgumentNullException("hostName");
      Dns.s_DnsPermission.Demand();
      IPAddress address;
      if (IPAddress.TryParse(hostName, out address))
        return Dns.GetUnresolveAnswer(address);
      else
        return Dns.InternalGetHostByName(hostName, false);
    }
    

    GetHostEntry Decompiled:

    public static IPHostEntry GetHostEntry(string hostNameOrAddress)
    {
      if (Logging.On)
        Logging.Enter(Logging.Sockets, "DNS", "GetHostEntry", hostNameOrAddress);
      Dns.s_DnsPermission.Demand();
      if (hostNameOrAddress == null)
        throw new ArgumentNullException("hostNameOrAddress");
      IPAddress address;
      IPHostEntry ipHostEntry;
      if (IPAddress.TryParse(hostNameOrAddress, out address))
      {
        if (((object) address).Equals((object) IPAddress.Any) || ((object) address).Equals((object) IPAddress.IPv6Any))
          throw new ArgumentException(SR.GetString("net_invalid_ip_addr"), "hostNameOrAddress");
        ipHostEntry = Dns.InternalGetHostByAddress(address, true);
      }
      else
        ipHostEntry = Dns.InternalGetHostByName(hostNameOrAddress, true);
      if (Logging.On)
        Logging.Exit(Logging.Sockets, "DNS", "GetHostEntry", (object) ipHostEntry);
      return ipHostEntry;
    }