using System; using System.Net.Sockets; using System.Runtime.InteropServices; using System.Security; namespace ArchestrAServices.Common.Resolution; [SuppressUnmanagedCodeSecurity] internal class WinSock { [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct WSAData { [MarshalAs(UnmanagedType.U2)] public ushort wVersion; [MarshalAs(UnmanagedType.U2)] public ushort wHighVersion; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 257)] private byte[] szDescription; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 129)] private byte[] szSystemStatus; [MarshalAs(UnmanagedType.U2)] public ushort iMaxSockets; [MarshalAs(UnmanagedType.U2)] public ushort iMaxUdpDg; [MarshalAs(UnmanagedType.LPStr)] public string lpVendorInfo; } [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct hostent { public IntPtr h_name; public IntPtr h_aliases; [MarshalAs(UnmanagedType.I2)] public short h_addrtype; [MarshalAs(UnmanagedType.I2)] public short h_length; public unsafe byte** h_addr_list; } internal const uint INADDR_NONE = uint.MaxValue; [DllImport("ws2_32", CharSet = CharSet.Ansi, SetLastError = true)] internal static extern int WSAStartup([In][MarshalAs(UnmanagedType.U2)] ushort wVersionRequested, [MarshalAs(UnmanagedType.Struct)] out WSAData lpWSAData); [DllImport("ws2_32", CharSet = CharSet.Ansi, SetLastError = true)] internal static extern int WSACleanup(); [DllImport("ws2_32", CharSet = CharSet.Ansi, SetLastError = true)] internal unsafe static extern hostent* gethostbyaddr([In][MarshalAs(UnmanagedType.I4)] ref int addr, [In][MarshalAs(UnmanagedType.I4)] int len, [In] ProtocolFamily type); [DllImport("ws2_32", BestFitMapping = false, CharSet = CharSet.Ansi, SetLastError = true)] internal unsafe static extern hostent* gethostbyname([In] string host); [DllImport("ws2_32", BestFitMapping = false, CharSet = CharSet.Ansi, SetLastError = true)] internal static extern int inet_addr([In] string cp); }