public static unsafe SocketError AcceptAsync(Socket socket, SafeCloseSocket handle, SafeCloseSocket acceptHandle, int receiveSize, int socketAddressSize, AcceptOverlappedAsyncResult asyncResult) { // The buffer needs to contain the requested data plus room for two sockaddrs and 16 bytes // of associated data for each. int addressBufferSize = socketAddressSize + 16; byte[] buffer = new byte[receiveSize + ((addressBufferSize) * 2)]; // Set up asyncResult for overlapped AcceptEx. // This call will use completion ports on WinNT. asyncResult.SetUnmanagedStructures(buffer, addressBufferSize); // This can throw ObjectDisposedException. int bytesTransferred; SocketError errorCode = SocketError.Success; if (!socket.AcceptEx( handle, acceptHandle, Marshal.UnsafeAddrOfPinnedArrayElement(asyncResult.Buffer, 0), receiveSize, addressBufferSize, addressBufferSize, out bytesTransferred, asyncResult.OverlappedHandle)) { errorCode = GetLastSocketError(); } return(errorCode); }
public static unsafe SocketError AcceptAsync(Socket socket, SafeCloseSocket handle, SafeCloseSocket acceptHandle, int receiveSize, int socketAddressSize, AcceptOverlappedAsyncResult asyncResult) { // The buffer needs to contain the requested data plus room for two sockaddrs and 16 bytes // of associated data for each. int addressBufferSize = socketAddressSize + 16; byte[] buffer = new byte[receiveSize + ((addressBufferSize) * 2)]; // Set up asyncResult for overlapped AcceptEx. // This call will use completion ports on WinNT. asyncResult.SetUnmanagedStructures(buffer, addressBufferSize); try { // This can throw ObjectDisposedException. int bytesTransferred; bool success = socket.AcceptEx( handle, acceptHandle, Marshal.UnsafeAddrOfPinnedArrayElement(asyncResult.Buffer, 0), receiveSize, addressBufferSize, addressBufferSize, out bytesTransferred, asyncResult.DangerousOverlappedPointer); // SafeHandle was just created in SetUnmanagedStructures return(asyncResult.ProcessOverlappedResult(success, 0)); } catch { asyncResult.ReleaseUnmanagedStructures(); throw; } }
internal unsafe SocketError DoOperationAccept(Socket socket, SafeCloseSocket handle, SafeCloseSocket acceptHandle, out int bytesTransferred) { PrepareIOCPOperation(); SocketError socketError = SocketError.Success; if (!socket.AcceptEx( handle, acceptHandle, (_ptrSingleBuffer != IntPtr.Zero) ? _ptrSingleBuffer : _ptrAcceptBuffer, (_ptrSingleBuffer != IntPtr.Zero) ? Count - _acceptAddressBufferCount : 0, _acceptAddressBufferCount / 2, _acceptAddressBufferCount / 2, out bytesTransferred, _ptrNativeOverlapped)) { socketError = SocketPal.GetLastSocketError(); } return socketError; }
public static unsafe SocketError AcceptAsync(Socket socket, SafeCloseSocket handle, SafeCloseSocket acceptHandle, int receiveSize, int socketAddressSize, AcceptOverlappedAsyncResult asyncResult) { // The buffer needs to contain the requested data plus room for two sockaddrs and 16 bytes // of associated data for each. int addressBufferSize = socketAddressSize + 16; byte[] buffer = new byte[receiveSize + ((addressBufferSize) * 2)]; // Set up asyncResult for overlapped AcceptEx. // This call will use completion ports on WinNT. asyncResult.SetUnmanagedStructures(buffer, addressBufferSize); // This can throw ObjectDisposedException. int bytesTransferred; SocketError errorCode = SocketError.Success; if (!socket.AcceptEx( handle, acceptHandle, Marshal.UnsafeAddrOfPinnedArrayElement(asyncResult.Buffer, 0), receiveSize, addressBufferSize, addressBufferSize, out bytesTransferred, asyncResult.OverlappedHandle)) { errorCode = GetLastSocketError(); } return errorCode; }