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 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); }