internal IPAddress GetIPAddress() { if (Family == AddressFamily.InterNetworkV6) { Debug.Assert(Size >= IPv6AddressSize); Span <byte> address = stackalloc byte[IPAddressParserStatics.IPv6AddressBytes]; uint scope; SocketAddressPal.GetIPv6Address(Buffer, address, out scope); return(new IPAddress(address, (long)scope)); } else if (Family == AddressFamily.InterNetwork) { Debug.Assert(Size >= IPv4AddressSize); long address = (long)SocketAddressPal.GetIPv4Address(Buffer) & 0x0FFFFFFFF; return(new IPAddress(address)); } else { #if SYSTEM_NET_PRIMITIVES_DLL throw new SocketException(SocketError.AddressFamilyNotSupported); #else throw new SocketException((int)SocketError.AddressFamilyNotSupported); #endif } }
internal IPAddress GetIPAddress() { if (Family == AddressFamily.InterNetworkV6) { Debug.Assert(Size >= IPv6AddressSize); Span <byte> address; unsafe { // TODO https://github.com/dotnet/roslyn/issues/17287: Clean up once we can stackalloc into a span byte *mem = stackalloc byte[IPAddressParserStatics.IPv6AddressBytes]; address = new Span <byte>(mem, IPAddressParserStatics.IPv6AddressBytes); } uint scope; SocketAddressPal.GetIPv6Address(Buffer, address, out scope); return(new IPAddress(address, (long)scope)); } else if (Family == AddressFamily.InterNetwork) { Debug.Assert(Size >= IPv4AddressSize); long address = (long)SocketAddressPal.GetIPv4Address(Buffer) & 0x0FFFFFFFF; return(new IPAddress(address)); } else { #if SYSTEM_NET_PRIMITIVES_DLL throw new SocketException(SocketError.AddressFamilyNotSupported); #else throw new SocketException((int)SocketError.AddressFamilyNotSupported); #endif } }
public void IPv4Address_Get_Set(uint address) { var buffer = new byte[SocketAddressPal.IPv4AddressSize]; SocketAddressPal.SetAddressFamily(buffer, AddressFamily.InterNetwork); SocketAddressPal.SetIPv4Address(buffer, address); Assert.Equal(address, SocketAddressPal.GetIPv4Address(buffer)); }
public void IPv4Address_Get_Set_Throws() { var buffer = new byte[4]; SocketAddressPal.SetAddressFamily(buffer, AddressFamily.InterNetwork); Assert.ThrowsAny <Exception>(() => SocketAddressPal.SetIPv4Address(buffer, 0)); Assert.ThrowsAny <Exception>(() => SocketAddressPal.GetIPv4Address(buffer)); }