diff --git a/cmonitor/client/tunnel/TunnelConnectionTcp.cs b/cmonitor/client/tunnel/TunnelConnectionTcp.cs index f6ab33cb..8ad75858 100644 --- a/cmonitor/client/tunnel/TunnelConnectionTcp.cs +++ b/cmonitor/client/tunnel/TunnelConnectionTcp.cs @@ -99,10 +99,7 @@ namespace cmonitor.client.tunnel } finally { - await writer.CompleteAsync(); Close(); - - Logger.Instance.Error($"tunnel connection writer offline {ToString()}"); } } private async Task ProcessReader() @@ -134,9 +131,7 @@ namespace cmonitor.client.tunnel } finally { - await reader.CompleteAsync(); Close(); - Logger.Instance.Error($"tunnel connection writer offline {ToString()}"); } } private unsafe int ReaderHead(ReadOnlySequence buffer) @@ -265,6 +260,7 @@ namespace cmonitor.client.tunnel { Logger.Instance.Error(ex); } + Close(); } finally { @@ -277,12 +273,20 @@ namespace cmonitor.client.tunnel callback = null; userToken = null; cancellationTokenSource?.Cancel(); - pipe = null; + bufferCache.Clear(true); Stream?.Close(); Stream?.Dispose(); - + try + { + pipe?.Writer.Complete(); + pipe?.Reader.Complete(); + } + catch (Exception) + { + } + pipe = null; } public override string ToString() diff --git a/cmonitor/server/IConnection.cs b/cmonitor/server/IConnection.cs index d514b94c..eda54f0f 100644 --- a/cmonitor/server/IConnection.cs +++ b/cmonitor/server/IConnection.cs @@ -6,6 +6,7 @@ using System.IO.Pipelines; using System.Net; using System.Net.Security; using System.Net.Sockets; +using System.Threading; namespace cmonitor.server { @@ -226,6 +227,7 @@ namespace cmonitor.server int length = await SourceStream.ReadAsync(buffer, cancellationTokenSource.Token); if (length == 0) { + Disponse(); break; } writer.Advance(length); @@ -236,12 +238,8 @@ namespace cmonitor.server } } } - catch (OperationCanceledException ex) + catch (OperationCanceledException) { - if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG) - { - Logger.Instance.Error(ex); - } } catch (Exception ex) { @@ -253,7 +251,7 @@ namespace cmonitor.server } finally { - await writer.CompleteAsync(); + Cancel(); } } private async Task ProcessReader() @@ -275,7 +273,6 @@ namespace cmonitor.server } catch (OperationCanceledException) { - } catch (Exception ex) { @@ -283,13 +280,11 @@ namespace cmonitor.server { Logger.Instance.Error(ex); } - if (SourceStream.CanRead == false) - Disponse(); + Disponse(); } finally { - await reader.CompleteAsync(); - + Cancel(); } } private unsafe int ReaderHead(ReadOnlySequence buffer) @@ -372,6 +367,7 @@ namespace cmonitor.server { Logger.Instance.Error(ex); } + Disponse(); } finally { @@ -442,15 +438,19 @@ namespace cmonitor.server public override void Cancel() { - pipe?.Writer.Complete(); - pipe?.Reader.Complete(); callback = null; userToken = null; cancellationTokenSource?.Cancel(); - - pipe = null; - bufferCache.Clear(true); + try + { + pipe?.Writer.Complete(); + pipe?.Reader.Complete(); + } + catch (Exception) + { + } + pipe = null; } public override void Disponse() { @@ -467,6 +467,7 @@ namespace cmonitor.server TargetStream?.ShutdownAsync(); TargetStream?.Dispose(); } + } catch (Exception) {