public void SendData(byte[] data, double timeout) { using (var buffer = new CFDataBuffer(data)) { var error = (CFSocketError)(long)CFSocketSendData(Handle, IntPtr.Zero, buffer.Handle, timeout); if (error != CFSocketError.Success) { throw new CFSocketException(error); } } }
internal static IPEndPoint EndPointFromAddressPtr(IntPtr address) { using (var buffer = new CFDataBuffer(address)) { if (buffer [1] == 30) // AF_INET6 { int port = (buffer [2] << 8) + buffer [3]; var bytes = new byte [16]; Buffer.BlockCopy(buffer.Data, 8, bytes, 0, 16); return(new IPEndPoint(new IPAddress(bytes), port)); } else if (buffer [1] == 2) // AF_INET { int port = (buffer [2] << 8) + buffer [3]; var bytes = new byte [4]; Buffer.BlockCopy(buffer.Data, 4, bytes, 0, 4); return(new IPEndPoint(new IPAddress(bytes), port)); } else { throw new ArgumentException(); } } }