private void SendFileInternal(string fileName, byte[] preBuffer, byte[] postBuffer, TransmitFileOptions flags) { // Open the file, if any FileStream fileStream = OpenFile(fileName); SocketError errorCode; using (fileStream) { SafeFileHandle fileHandle = fileStream?.SafeFileHandle; // This can throw ObjectDisposedException. errorCode = SocketPal.SendFile(_handle, fileHandle, preBuffer, postBuffer, flags); } if (errorCode != SocketError.Success) { SocketException socketException = new SocketException((int)errorCode); UpdateStatusAfterSocketError(socketException); if (NetEventSource.IsEnabled) { NetEventSource.Error(this, socketException); } throw socketException; } // If the user passed the Disconnect and/or ReuseSocket flags, then TransmitFile disconnected the socket. // Update our state to reflect this. if ((flags & (TransmitFileOptions.Disconnect | TransmitFileOptions.ReuseSocket)) != 0) { SetToDisconnected(); _remoteEndPoint = null; } }
private void SendFileInternal(string fileName, byte[] preBuffer, byte[] postBuffer, TransmitFileOptions flags) { CheckTransmitFileOptions(flags); // Open the file, if any // Open it before we send the preBuffer so that any exception happens first FileStream fileStream = OpenFile(fileName); SocketError errorCode = SocketError.Success; using (fileStream) { // Send the preBuffer, if any // This will throw on error if (preBuffer != null && preBuffer.Length > 0) { Send(preBuffer); } // Send the file, if any if (fileStream != null) { // This can throw ObjectDisposedException. errorCode = SocketPal.SendFile(_handle, fileStream); } } if (errorCode != SocketError.Success) { SocketException socketException = new SocketException((int)errorCode); UpdateStatusAfterSocketError(socketException); if (NetEventSource.IsEnabled) { NetEventSource.Error(this, socketException); } throw socketException; } // Send the postBuffer, if any // This will throw on error if (postBuffer != null && postBuffer.Length > 0) { Send(postBuffer); } }
private void SendFileInternal(string?fileName, byte[]?preBuffer, byte[]?postBuffer, TransmitFileOptions flags) { CheckTransmitFileOptions(flags); // Open the file, if any // Open it before we send the preBuffer so that any exception happens first FileStream?fileStream = OpenFile(fileName); SocketError errorCode = SocketError.Success; using (fileStream) { // Send the preBuffer, if any // This will throw on error if (preBuffer != null && preBuffer.Length > 0) { Send(preBuffer); } // Send the file, if any if (fileStream != null) { // This can throw ObjectDisposedException. errorCode = SocketPal.SendFile(_handle, fileStream); } } if (errorCode != SocketError.Success) { UpdateSendSocketErrorForDisposed(ref errorCode); UpdateStatusAfterSocketErrorAndThrowException(errorCode); } // Send the postBuffer, if any // This will throw on error if (postBuffer != null && postBuffer.Length > 0) { Send(postBuffer); } }