Exemple #1
0
 public static extern SocketError WSARecv(
     [In] IntPtr socketHandle,
     [In] ref WSABuffer buffer, [In] int bufferCount,
     out int bytesTransferred,
     [In, Out] ref SocketFlags socketFlags,
     [In] IntPtr overlapped,
     [In] IntPtr completionRoutine);
Exemple #2
0
        public override void Receive(byte[] buffer, int offset, int count, SocketFlags flags)
        {
            if (buffer == null)
            {
                throw new ArgumentNullException("buffer");
            }

            m_inOverlapped.StartOperation(OperationType.Receive, buffer);

            var receiveBuffer = new WSABuffer();

            receiveBuffer.Pointer = new IntPtr(m_inOverlapped.BufferAddress + offset);
            receiveBuffer.Length  = count;

            int bytesTransferred;

            SocketError socketError = UnsafeMethods.WSARecv(Handle, ref receiveBuffer, 1,
                                                            out bytesTransferred, ref flags, m_inOverlapped.Address, IntPtr.Zero);

            if (socketError != SocketError.Success)
            {
                socketError = (SocketError)Marshal.GetLastWin32Error();

                if (socketError != SocketError.IOPending)
                {
                    throw new SocketException((int)socketError);
                }
            }
        }
Exemple #3
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);

            var sendBuffer = new WSABuffer
            {
                Pointer = new IntPtr(m_outOverlapped.BufferAddress + offset),
                Length  = count
            };

            SocketError socketError = UnsafeMethods.WSASend(Handle, ref sendBuffer, 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);
                }
            }
        }
Exemple #4
0
        public Socket(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType)
            : base(addressFamily, socketType, protocolType)
        {
            m_disposed = false;

            m_inOverlapped  = new Overlapped(this);
            m_outOverlapped = new Overlapped(this);

            m_sendWSABuffer    = new WSABuffer();
            m_receiveWSABuffer = new WSABuffer();

            InitSocket();
            InitDynamicMethods();
        }