in src/Azure.AppService.Tunnel/Tunnel/Sockets/SocketConnection.cs [33:71]
protected Task StartProcessingMessages()
{
return Task.Factory.StartNew(() =>
{
_logger.Info("Begin processing messages");
var receiveBuffer = new byte[16384];
var socket = Socket.Value;
while (socket.Connected && _lifetime.IsAlive)
{
try
{
var receivedBytes = socket.Receive(receiveBuffer);
if (receivedBytes > 0)
_dataReceived.Fire(receiveBuffer.Take(receivedBytes).ToArray());
}
catch (Exception e)
{
switch (e)
{
case SocketException { SocketErrorCode: SocketError.TimedOut or SocketError.WouldBlock }:
continue;
case SocketException:
case ObjectDisposedException:
_logger.Verbose($"Exception during Receive: {e.GetType().Name} {e.Message}");
break;
default:
_logger.Error(e);
throw;
}
}
}
}, _lifetime, TaskCreationOptions.LongRunning, TaskScheduler.Default);
}