public override void Send(byte[] buffer, int offset, int count, SocketFlags flags) { if (buffer == null) { throw new ArgumentNullException("buffer"); } int bytesTransferred; m_outOverlapped.StartOperation(OperationType.Send, buffer); m_sendWSABuffer.Pointer = new IntPtr(m_outOverlapped.BufferAddress + offset); m_sendWSABuffer.Length = count; SocketError socketError = UnsafeMethods.WSASend(Handle, ref m_sendWSABuffer, 1, out bytesTransferred, flags, m_outOverlapped.Address, IntPtr.Zero); if (socketError != SocketError.Success) { socketError = (SocketError)Marshal.GetLastWin32Error(); if (socketError != SocketError.IOPending) { throw new SocketException((int)socketError); } } }