public void SockaddrIn6Test() { if (!Socket.OSSupportsIPv6) { Assert.Ignore("OS does not support IPv6."); } var address1 = new SockaddrIn6 { sin6_family = UnixAddressFamily.AF_INET6, sin6_port = Syscall.htons(1234), sin6_flowinfo = 2, sin6_addr = NativeConvert.ToIn6Addr(IPAddress.IPv6Loopback), sin6_scope_id = 3 }; var storage = address1.ToSockaddrStorage(); var address2 = SockaddrIn6.FromSockaddrStorage(storage); Assert.AreEqual(address1, address2); var sockaddr = Sockaddr.FromSockaddrStorage(storage); Assert.AreEqual(sockaddr.sa_family, address1.sa_family); Assert.AreEqual("{sin6_family=AF_INET6, sin6_port=htons(1234), sin6_flowinfo=2, sin6_addr=::1, sin6_scope_id=3}", address1.ToString()); }
public void IPv6() { if (!Socket.OSSupportsIPv6) { Assert.Ignore("OS does not support IPv6."); } var address = new SockaddrIn6 { sin6_family = UnixAddressFamily.AF_INET6, sin6_port = Syscall.htons(0), sin6_addr = NativeConvert.ToIn6Addr(IPAddress.IPv6Loopback), }; WithSockets(UnixAddressFamily.AF_INET6, UnixSocketType.SOCK_STREAM, 0, (so1, so2) => { if (Syscall.bind(so1, address) < 0) { UnixMarshal.ThrowExceptionForLastError(); } var address1Stor = new SockaddrStorage(); if (Syscall.getsockname(so1, address1Stor) < 0) { UnixMarshal.ThrowExceptionForLastError(); } var address1 = new SockaddrIn6(); address1Stor.CopyTo(address1); // Check getsockname(socket, null) if (Syscall.getsockname(so1, null) < 0) { UnixMarshal.ThrowExceptionForLastError(); } var address2 = new SockaddrIn6(); if (Syscall.getsockname(so1, address2) < 0) { UnixMarshal.ThrowExceptionForLastError(); } Assert.AreEqual(address1, address2); Assert.IsTrue(Syscall.ntohs(address1.sin6_port) != 0); address1.sin6_port = 0; Assert.AreEqual(address, address1); var address3 = new Sockaddr(); if (Syscall.getsockname(so1, address3) < 0) { UnixMarshal.ThrowExceptionForLastError(); } Assert.AreEqual(address.sa_family, address3.sa_family); // Try to store a sockaddr_in6 into a Sockaddr. Should fail because sockaddr_in6 should be larger than sockaddr_in var address4 = new SockaddrIn(); if (Syscall.getsockname(so1, address4) == 0) { Assert.Fail("getsockname() should have failed"); } Assert.AreEqual(Errno.ENOBUFS, Stdlib.GetLastError()); }); }
public void IPv6 () { if (!Socket.OSSupportsIPv6) Assert.Ignore ("OS does not support IPv6."); var address = new SockaddrIn6 { sin6_family = UnixAddressFamily.AF_INET6, sin6_port = Syscall.htons (0), sin6_addr = NativeConvert.ToIn6Addr (IPAddress.IPv6Loopback), }; WithSockets (UnixAddressFamily.AF_INET6, UnixSocketType.SOCK_STREAM, 0, (so1, so2) => { if (Syscall.bind (so1, address) < 0) UnixMarshal.ThrowExceptionForLastError (); var address1Stor = new SockaddrStorage (); if (Syscall.getsockname (so1, address1Stor) < 0) UnixMarshal.ThrowExceptionForLastError (); var address1 = new SockaddrIn6 (); address1Stor.CopyTo (address1); // Check getsockname(socket, null) if (Syscall.getsockname (so1, null) < 0) UnixMarshal.ThrowExceptionForLastError (); var address2 = new SockaddrIn6 (); if (Syscall.getsockname (so1, address2) < 0) UnixMarshal.ThrowExceptionForLastError (); Assert.AreEqual (address1, address2); Assert.IsTrue (Syscall.ntohs (address1.sin6_port) != 0); address1.sin6_port = 0; Assert.AreEqual (address, address1); var address3 = new Sockaddr (); if (Syscall.getsockname (so1, address3) < 0) UnixMarshal.ThrowExceptionForLastError (); Assert.AreEqual (address.sa_family, address3.sa_family); // Try to store a sockaddr_in6 into a Sockaddr. Should fail because sockaddr_in6 should be larger than sockaddr_in var address4 = new SockaddrIn (); if (Syscall.getsockname (so1, address4) == 0) Assert.Fail ("getsockname() should have failed"); Assert.AreEqual (Errno.ENOBUFS, Stdlib.GetLastError ()); }); }
public void SockaddrIn6Test () { if (!Socket.OSSupportsIPv6) Assert.Ignore ("OS does not support IPv6."); var address1 = new SockaddrIn6 { sin6_family = UnixAddressFamily.AF_INET6, sin6_port = Syscall.htons (1234), sin6_flowinfo = 2, sin6_addr = NativeConvert.ToIn6Addr (IPAddress.IPv6Loopback), sin6_scope_id = 3 }; var storage = address1.ToSockaddrStorage (); var address2 = SockaddrIn6.FromSockaddrStorage (storage); Assert.AreEqual (address1, address2); var sockaddr = Sockaddr.FromSockaddrStorage (storage); Assert.AreEqual (sockaddr.sa_family, address1.sa_family); Assert.AreEqual ("{sin6_family=AF_INET6, sin6_port=htons(1234), sin6_flowinfo=2, sin6_addr=::1, sin6_scope_id=3}", address1.ToString ()); }
public static bool TryCopy (IntPtr source, SockaddrIn6 destination) { return ToSockaddrIn6 (source, destination) == 0; }
private static extern int ToSockaddrIn6 (IntPtr source, SockaddrIn6 destination);
public static bool TryCopy (SockaddrIn6 source, IntPtr destination) { return FromSockaddrIn6 (source, destination) == 0; }
private static extern int FromSockaddrIn6 (SockaddrIn6 source, IntPtr destination);