public static CriticalAllocHandleSocketAddressList FromAddressList(ICollection<IPAddress> addresses) { if (addresses == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("addresses"); } int count = addresses.Count; CriticalAllocHandleSocketAddress[] addressArray = new CriticalAllocHandleSocketAddress[50]; SocketAddressList structure = new SocketAddressList(new System.ServiceModel.Channels.SocketAddress[50], count); int index = 0; foreach (IPAddress address in addresses) { if (index == 50) { break; } addressArray[index] = CriticalAllocHandleSocketAddress.FromIPAddress(address); structure.Addresses[index].InitializeFromCriticalAllocHandleSocketAddress(addressArray[index]); index++; } CriticalAllocHandleSocketAddressList list2 = FromSize(Marshal.SizeOf(structure)); list2.count = count; list2.socketHandles = addressArray; Marshal.StructureToPtr(structure, (IntPtr) list2, false); return list2; }
public ReadOnlyCollection <IPAddress> SortAddresses(ReadOnlyCollection <IPAddress> addresses) { ReadOnlyCollection <IPAddress> onlys = SocketAddressList.SortAddresses(this.ipv6Socket, this.listenAddress, addresses); if (this.listenAddress != null) { if (this.listenAddress.IsIPv6LinkLocal) { foreach (IPAddress address in onlys) { if (address.IsIPv6LinkLocal) { address.ScopeId = this.listenAddress.ScopeId; } } return(onlys); } if (!this.listenAddress.IsIPv6SiteLocal) { return(onlys); } foreach (IPAddress address2 in onlys) { if (address2.IsIPv6SiteLocal) { address2.ScopeId = this.listenAddress.ScopeId; } } } return(onlys); }
public static CriticalAllocHandleSocketAddressList FromAddressList(ICollection <IPAddress> addresses) { if (addresses == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("addresses"); } int count = addresses.Count; CriticalAllocHandleSocketAddress[] addressArray = new CriticalAllocHandleSocketAddress[50]; SocketAddressList structure = new SocketAddressList(new System.ServiceModel.Channels.SocketAddress[50], count); int index = 0; foreach (IPAddress address in addresses) { if (index == 50) { break; } addressArray[index] = CriticalAllocHandleSocketAddress.FromIPAddress(address); structure.Addresses[index].InitializeFromCriticalAllocHandleSocketAddress(addressArray[index]); index++; } CriticalAllocHandleSocketAddressList list2 = FromSize(Marshal.SizeOf(structure)); list2.count = count; list2.socketHandles = addressArray; Marshal.StructureToPtr(structure, (IntPtr)list2, false); return(list2); }
// Sorts the collection of addresses using sort ioctl public ReadOnlyCollection <IPAddress> SortAddresses(ReadOnlyCollection <IPAddress> addresses) { ReadOnlyCollection <IPAddress> sortedAddresses = SocketAddressList.SortAddresses(this.ipv6Socket, listenAddress, addresses); // If listening on specific address, copy the scope ID that we're listing on for the // link and site local addresses in the sorted list (so that the connect will work) if (this.listenAddress != null) { if (this.listenAddress.IsIPv6LinkLocal) { foreach (IPAddress address in sortedAddresses) { if (address.IsIPv6LinkLocal) { address.ScopeId = this.listenAddress.ScopeId; } } } else if (this.listenAddress.IsIPv6SiteLocal) { foreach (IPAddress address in sortedAddresses) { if (address.IsIPv6SiteLocal) { address.ScopeId = this.listenAddress.ScopeId; } } } } return(sortedAddresses); }
public static CriticalAllocHandleSocketAddressList FromAddressList(ICollection <IPAddress> addresses) { if (addresses == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("addresses"); } int count = addresses.Count; CriticalAllocHandleSocketAddress[] socketHandles = new CriticalAllocHandleSocketAddress[SocketAddressList.maxAddresses]; SocketAddressList socketAddressList = new SocketAddressList(new SocketAddress[SocketAddressList.maxAddresses], count); int i = 0; foreach (IPAddress address in addresses) { if (i == SocketAddressList.maxAddresses) { break; // due to Marshalling fixed sized array of SocketAddresses. } socketHandles[i] = CriticalAllocHandleSocketAddress.FromIPAddress(address); socketAddressList.Addresses[i].InitializeFromCriticalAllocHandleSocketAddress(socketHandles[i]); ++i; } int size = Marshal.SizeOf(socketAddressList); CriticalAllocHandleSocketAddressList result = CriticalAllocHandleSocketAddressList.FromSize(size); result.count = count; result.socketHandles = socketHandles; Marshal.StructureToPtr(socketAddressList, result, false); return(result); }
public static CriticalAllocHandleSocketAddressList FromAddressCount(int count) { SocketAddressList structure = new SocketAddressList(new System.ServiceModel.Channels.SocketAddress[50], 0); CriticalAllocHandleSocketAddressList list2 = FromSize(Marshal.SizeOf(structure)); list2.count = count; Marshal.StructureToPtr(structure, (IntPtr) list2, false); return list2; }
public static CriticalAllocHandleSocketAddressList FromAddressCount(int count) { SocketAddressList structure = new SocketAddressList(new System.ServiceModel.Channels.SocketAddress[50], 0); CriticalAllocHandleSocketAddressList list2 = FromSize(Marshal.SizeOf(structure)); list2.count = count; Marshal.StructureToPtr(structure, (IntPtr)list2, false); return(list2); }
public static CriticalAllocHandleSocketAddressList FromAddressCount(int count) { SocketAddressList socketAddressList = new SocketAddressList(new SocketAddress[SocketAddressList.maxAddresses], 0); int size = Marshal.SizeOf(socketAddressList); CriticalAllocHandleSocketAddressList result = CriticalAllocHandleSocketAddressList.FromSize(size); result.count = count; Marshal.StructureToPtr(socketAddressList, result, false); return(result); }
public ReadOnlyCollection <IPAddress> ToAddresses() { SocketAddressList list = (SocketAddressList)Marshal.PtrToStructure((IntPtr)this, typeof(SocketAddressList)); IPAddress[] array = new IPAddress[list.Count]; for (int i = 0; i < array.Length; i++) { if (list.Addresses[i].SockAddrLength != Marshal.SizeOf(typeof(System.ServiceModel.Channels.sockaddr_in6))) { throw Fx.AssertAndThrow("sockAddressLength in SOCKET_ADDRESS expected to be valid"); } array[i] = ((System.ServiceModel.Channels.sockaddr_in6)Marshal.PtrToStructure(list.Addresses[i].SockAddr, typeof(System.ServiceModel.Channels.sockaddr_in6))).ToIPAddress(); } return(Array.AsReadOnly <IPAddress>(array)); }
public ReadOnlyCollection <IPAddress> ToAddresses() { SocketAddressList socketAddressList = (SocketAddressList)Marshal.PtrToStructure(this, typeof(SocketAddressList)); IPAddress[] addresses = new IPAddress[socketAddressList.Count]; for (int i = 0; i < addresses.Length; i++) { if (!(socketAddressList.Addresses[i].SockAddrLength == Marshal.SizeOf(typeof(sockaddr_in6)))) { throw Fx.AssertAndThrow("sockAddressLength in SOCKET_ADDRESS expected to be valid"); } sockaddr_in6 sockAddr = (sockaddr_in6)Marshal.PtrToStructure(socketAddressList.Addresses[i].SockAddr, typeof(sockaddr_in6)); addresses[i] = sockAddr.ToIPAddress(); } return(Array.AsReadOnly <IPAddress>(addresses)); }