internal NetworkInterface(uv_interface_address_t *iface) { Name = Marshal.PtrToStringAnsi(iface->name); Internal = iface->is_internal != 0; byte[] phys_addr = new byte[6]; for (int i = 0; i < phys_addr.Length; i++) { phys_addr[i] = iface->phys_addr[i]; } PhysicalAddress = new PhysicalAddress(phys_addr); Address = UV.GetIPEndPoint(new IntPtr(&iface->sockaddr)).Address; Netmask = UV.GetIPEndPoint(new IntPtr(&iface->netmask)).Address; }
internal static NetworkInterface[] GetInterfaces() { IntPtr interfaces; int count; var error = uv_interface_addresses(out interfaces, out count); NetworkInterface[] ret = new NetworkInterface[count]; for (int i = 0; i < count; i++) { uv_interface_address_t *iface = (uv_interface_address_t *)(IntPtr)((((long)interfaces) + (long)(i * sizeof(uv_interface_address_t)))); ret[i] = new NetworkInterface(iface); } uv_free_interface_addresses(interfaces, count); Ensure.Success(error); return(ret); }
internal static NetworkInterface[] GetInterfaces() { IntPtr interfaces; int count; int r = uv_interface_addresses(out interfaces, out count); Ensure.Success(r); NetworkInterface[] ret = new NetworkInterface[count]; for (int i = 0; i < count; i++) { uv_interface_address_t *iface = (uv_interface_address_t *)(interfaces.ToInt64() + i * sizeof(uv_interface_address_t)); ret[i] = new NetworkInterface(iface); } uv_free_interface_addresses(interfaces, count); return(ret); }
internal NetworkInterface(uv_interface_address_t *iface) { Name = Marshal.PtrToStringAnsi(iface->name); Internal = iface->is_internal != 0; Address = UV.GetIPEndPoint((IntPtr)(((long)new IntPtr(iface)) + (long)(sizeof(IntPtr) + sizeof(int)))).Address; }