diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2017-09-02 22:42:13 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2017-09-02 22:42:13 -0400 |
| commit | 78165d78a23c4f8f05706619c5021754e99097f6 (patch) | |
| tree | a6066d824c562e2972b49db5705822771f6dc004 /SocketHttpListener/Net/HttpResponseStream.Managed.cs | |
| parent | da3d8894a8574c9ec3d2ce122a9f60ab2b04511d (diff) | |
update SocketHttpListener
Diffstat (limited to 'SocketHttpListener/Net/HttpResponseStream.Managed.cs')
| -rw-r--r-- | SocketHttpListener/Net/HttpResponseStream.Managed.cs | 59 |
1 files changed, 2 insertions, 57 deletions
diff --git a/SocketHttpListener/Net/HttpResponseStream.Managed.cs b/SocketHttpListener/Net/HttpResponseStream.Managed.cs index b700c293d..d5ef0b320 100644 --- a/SocketHttpListener/Net/HttpResponseStream.Managed.cs +++ b/SocketHttpListener/Net/HttpResponseStream.Managed.cs @@ -51,13 +51,13 @@ namespace SocketHttpListener.Net private bool _trailer_sent; private Stream _stream; private readonly IMemoryStreamFactory _memoryStreamFactory; - private readonly IAcceptSocket _socket; + private readonly Socket _socket; private readonly bool _supportsDirectSocketAccess; private readonly IEnvironmentInfo _environment; private readonly IFileSystem _fileSystem; private readonly ILogger _logger; - internal HttpResponseStream(Stream stream, HttpListenerResponse response, bool ignore_errors, IMemoryStreamFactory memoryStreamFactory, IAcceptSocket socket, bool supportsDirectSocketAccess, IEnvironmentInfo environment, IFileSystem fileSystem, ILogger logger) + internal HttpResponseStream(Stream stream, HttpListenerResponse response, bool ignore_errors, IMemoryStreamFactory memoryStreamFactory, Socket socket, bool supportsDirectSocketAccess, IEnvironmentInfo environment, IFileSystem fileSystem, ILogger logger) { _response = response; _ignore_errors = ignore_errors; @@ -289,64 +289,9 @@ namespace SocketHttpListener.Net public Task TransmitFile(string path, long offset, long count, FileShareMode fileShareMode, CancellationToken cancellationToken) { - if (_supportsDirectSocketAccess && offset == 0 && count == 0 && !_response.SendChunked && _response.ContentLength64 > 8192) - { - if (EnableSendFileWithSocket) - { - return TransmitFileOverSocket(path, offset, count, fileShareMode, cancellationToken); - } - } return TransmitFileManaged(path, offset, count, fileShareMode, cancellationToken); } - private readonly byte[] _emptyBuffer = new byte[] { }; - private Task TransmitFileOverSocket(string path, long offset, long count, FileShareMode fileShareMode, CancellationToken cancellationToken) - { - var ms = GetHeaders(false); - - byte[] preBuffer; - if (ms != null) - { - using (var msCopy = new MemoryStream()) - { - ms.CopyTo(msCopy); - preBuffer = msCopy.ToArray(); - } - } - else - { - return TransmitFileManaged(path, offset, count, fileShareMode, cancellationToken); - } - - //_logger.Info("Socket sending file {0} {1}", path, response.ContentLength64); - - var taskCompletion = new TaskCompletionSource<bool>(); - - Action<IAsyncResult> callback = callbackResult => - { - try - { - _socket.EndSendFile(callbackResult); - taskCompletion.TrySetResult(true); - } - catch (Exception ex) - { - taskCompletion.TrySetException(ex); - } - }; - - var result = _socket.BeginSendFile(path, preBuffer, _emptyBuffer, new AsyncCallback(callback), null); - - if (result.CompletedSynchronously) - { - callback(result); - } - - cancellationToken.Register(() => taskCompletion.TrySetCanceled()); - - return taskCompletion.Task; - } - const int StreamCopyToBufferSize = 81920; private async Task TransmitFileManaged(string path, long offset, long count, FileShareMode fileShareMode, CancellationToken cancellationToken) { |
