|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System.Net.Sockets;
using System.Runtime.InteropServices;
internal static partial class Interop
{
internal static partial class Sys
{
internal const int NI_MAXHOST = 1025;
internal const int NI_MAXSERV = 32;
internal enum GetAddrInfoErrorFlags : int
{
EAI_AGAIN = 1, // Temporary failure in name resolution.
EAI_BADFLAGS = 2, // Invalid value for `ai_flags' field.
EAI_FAIL = 3, // Non-recoverable failure in name resolution.
EAI_FAMILY = 4, // 'ai_family' not supported.
EAI_NONAME = 5, // NAME or SERVICE is unknown.
EAI_BADARG = 6, // One or more input arguments were invalid.
EAI_NOMORE = 7, // No more entries are present in the list.
EAI_MEMORY = 8, // Out of memory.
EAI_SYSTEM = 9, // Other system error; errno is set to indicate the error.
}
[StructLayout(LayoutKind.Sequential)]
internal unsafe struct HostEntry
{
internal byte* CanonicalName; // Canonical Name of the Host
internal byte** Aliases; // List of aliases for the host
internal IPAddress* IPAddressList; // Handle for socket address list
internal int IPAddressCount; // Number of IP addresses in the list
}
[LibraryImport(Libraries.SystemNative, EntryPoint = "SystemNative_GetHostEntryForName", StringMarshalling = StringMarshalling.Utf8)]
internal static unsafe partial int GetHostEntryForName(string address, AddressFamily family, HostEntry* entry);
[LibraryImport(Libraries.SystemNative, EntryPoint = "SystemNative_FreeHostEntry")]
internal static unsafe partial void FreeHostEntry(HostEntry* entry);
}
}
|