private IAsyncResult BeginSendFileInternal(string fileName, byte[] preBuffer, byte[] postBuffer, TransmitFileOptions flags, AsyncCallback callback, object state) { FileStream fileStream = OpenFile(fileName); TransmitFileAsyncResult asyncResult = new TransmitFileAsyncResult(this, state, callback); asyncResult.StartPostingAsyncOp(false); SocketError errorCode = SocketPal.SendFileAsync(_handle, fileStream, preBuffer, postBuffer, flags, asyncResult); // Check for synchronous exception if (errorCode != SocketError.Success) { SocketException socketException = new SocketException((int)errorCode); UpdateStatusAfterSocketError(socketException); if (NetEventSource.IsEnabled) { NetEventSource.Error(this, socketException); } throw socketException; } asyncResult.FinishPostingAsyncOp(ref Caches.SendClosureCache); return(asyncResult); }
private IAsyncResult BeginSendFileInternal(string fileName, byte[] preBuffer, byte[] postBuffer, TransmitFileOptions flags, AsyncCallback callback, object state) { FileStream fileStream = OpenFile(fileName); TransmitFileAsyncResult asyncResult = new TransmitFileAsyncResult(this, state, callback); asyncResult.StartPostingAsyncOp(false); SocketError errorCode = SocketPal.SendFileAsync(_handle, fileStream, preBuffer, postBuffer, flags, asyncResult); // Check for synchronous exception if (!CheckErrorAndUpdateStatus(errorCode)) { throw new SocketException((int)errorCode); } asyncResult.FinishPostingAsyncOp(ref Caches.SendClosureCache); return(asyncResult); }
private void EndSendFileInternal(IAsyncResult asyncResult) { TransmitFileAsyncResult castedAsyncResult = asyncResult as TransmitFileAsyncResult; if (castedAsyncResult == null || castedAsyncResult.AsyncObject != this) { throw new ArgumentException(SR.net_io_invalidasyncresult, nameof(asyncResult)); } if (castedAsyncResult.EndCalled) { throw new InvalidOperationException(SR.Format(SR.net_io_invalidendcall, "EndSendFile")); } castedAsyncResult.InternalWaitForCompletion(); castedAsyncResult.EndCalled = true; // If the user passed the Disconnect and/or ReuseSocket flags, then TransmitFile disconnected the socket. // Update our state to reflect this. if (castedAsyncResult.DoDisconnect) { SetToDisconnected(); _remoteEndPoint = null; } if ((SocketError)castedAsyncResult.ErrorCode != SocketError.Success) { SocketException socketException = new SocketException(castedAsyncResult.ErrorCode); UpdateStatusAfterSocketError(socketException); if (NetEventSource.IsEnabled) { NetEventSource.Error(this, socketException); } throw socketException; } }
public static unsafe SocketError SendFileAsync(SafeCloseSocket handle, FileStream fileStream, byte[] preBuffer, byte[] postBuffer, TransmitFileOptions flags, TransmitFileAsyncResult asyncResult) { asyncResult.SetUnmanagedStructures(fileStream, preBuffer, postBuffer, (flags & (TransmitFileOptions.Disconnect | TransmitFileOptions.ReuseSocket)) != 0); try { bool success = TransmitFileHelper( handle, fileStream?.SafeFileHandle, asyncResult.OverlappedHandle, preBuffer, postBuffer, flags); return(asyncResult.ProcessOverlappedResult(success, 0)); } catch { asyncResult.ReleaseUnmanagedStructures(); throw; } }
public static unsafe SocketError SendFileAsync(SafeCloseSocket handle, FileStream fileStream, byte[] preBuffer, byte[] postBuffer, TransmitFileOptions flags, TransmitFileAsyncResult asyncResult) { asyncResult.SetUnmanagedStructures(fileStream, preBuffer, postBuffer, (flags & (TransmitFileOptions.Disconnect | TransmitFileOptions.ReuseSocket)) != 0); SocketError errorCode = TransmitFileHelper(handle, fileStream?.SafeFileHandle, asyncResult.OverlappedHandle, preBuffer, postBuffer, flags); // This will release resources if necessary errorCode = asyncResult.CheckAsyncCallOverlappedResult(errorCode); return errorCode; }
public static unsafe SocketError SendFileAsync(SafeCloseSocket handle, FileStream fileStream, byte[] preBuffer, byte[] postBuffer, TransmitFileOptions flags, TransmitFileAsyncResult asyncResult) { asyncResult.SetUnmanagedStructures(fileStream, preBuffer, postBuffer, (flags & (TransmitFileOptions.Disconnect | TransmitFileOptions.ReuseSocket)) != 0); SocketError errorCode = TransmitFileHelper(handle, fileStream?.SafeFileHandle, asyncResult.OverlappedHandle, preBuffer, postBuffer, flags); // This will release resources if necessary errorCode = asyncResult.CheckAsyncCallOverlappedResult(errorCode); return(errorCode); }
private IAsyncResult BeginSendFileInternal(string fileName, byte[] preBuffer, byte[] postBuffer, TransmitFileOptions flags, AsyncCallback callback, object state) { FileStream fileStream = OpenFile(fileName); TransmitFileAsyncResult asyncResult = new TransmitFileAsyncResult(this, state, callback); asyncResult.StartPostingAsyncOp(false); SocketError errorCode = SocketPal.SendFileAsync(_handle, fileStream, preBuffer, postBuffer, flags, asyncResult); // Check for synchronous exception if (errorCode != SocketError.Success) { SocketException socketException = new SocketException((int)errorCode); UpdateStatusAfterSocketError(socketException); if (NetEventSource.IsEnabled) NetEventSource.Error(this, socketException); throw socketException; } asyncResult.FinishPostingAsyncOp(ref Caches.SendClosureCache); return asyncResult; }