Beispiel #1
0
        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
            }
        }
Beispiel #2
0
        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
            }
        }
Beispiel #3
0
        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));
        }
Beispiel #4
0
        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));
        }