Exemplo n.º 1
0
        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);
                }
            }
        }