[fix] socket not dispose

This commit is contained in:
springhgui 2021-10-29 22:51:06 +08:00
parent b9e0f62fa6
commit 29ff330c02
3 changed files with 9 additions and 4 deletions

View File

@ -1,4 +1,5 @@
using FastTunnel.Core.Client;
using FastTunnel.Core.Extensions;
using FastTunnel.Core.MiddleWares;
using Microsoft.AspNetCore.Connections.Features;
using Microsoft.AspNetCore.Http;
@ -31,7 +32,7 @@ namespace FastTunnel.Core.Forwarder.MiddleWare
}
var requestId = context.Request.Path.Value.Trim('/');
logger.LogError($"[PROXY]:Start {requestId}");
logger.LogDebug($"[PROXY]:Start {requestId}");
if (!fastTunnelServer.ResponseTasks.TryRemove(requestId, out var responseAwaiter))
{
@ -52,6 +53,8 @@ namespace FastTunnel.Core.Forwarder.MiddleWare
responseAwaiter.TrySetResult(reverseConnection);
var closedAwaiter = new TaskCompletionSource<object>();
closedAwaiter.SetTimeOut(1000 * 60 * 30, null);
lifetime.ConnectionClosed.Register((task) =>
{
(task as TaskCompletionSource<object>).SetResult(null);

View File

@ -55,13 +55,14 @@ namespace FastTunnel.Core.Handlers.Client
private async Task<Stream> createLocal(string requestId, string localhost, CancellationToken cancellationToken)
{
var socket = await DnsSocketFactory.ConnectAsync(localhost.Split(":")[0], int.Parse(localhost.Split(":")[1]));
return new NetworkStream(socket, true);
return new NetworkStream(socket, true) { ReadTimeout = 1000 * 60 * 30 };
}
private async Task<Stream> createRemote(string requestId, FastTunnelClient cleint, CancellationToken cancellationToken)
{
var socket = await DnsSocketFactory.ConnectAsync(cleint.Server.ServerAddr, cleint.Server.ServerPort);
Stream serverStream = new NetworkStream(socket, true);
Stream serverStream = new NetworkStream(socket, true) { ReadTimeout = 1000 * 60 * 30 };
if (cleint.Server.Protocol == "wss")
{
var sslStream = new SslStream(serverStream, false, delegate { return true; });

View File

@ -69,7 +69,8 @@ namespace FastTunnel.Core.Dispatchers
}
using var stream1 = await tcs.Task;
using var stream2 = new NetworkStream(_socket, true);
using var stream2 = new NetworkStream(_socket, true) { ReadTimeout = 1000 * 60 * 30 };
await Task.WhenAll(stream1.CopyToAsync(stream2), stream2.CopyToAsync(stream1));
logger.LogDebug($"[Forward]Swap OK {msgId}");