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