Fix multiple UDP servers for AutoDiscovery

This commit is contained in:
Shadowghost 2022-07-21 19:38:19 +02:00
parent cea8e8bbf6
commit ff22f597d2

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using System.Net.Sockets; using System.Net.Sockets;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -36,7 +37,7 @@ namespace Emby.Server.Implementations.EntryPoints
/// <summary> /// <summary>
/// The UDP server. /// The UDP server.
/// </summary> /// </summary>
private UdpServer? _udpServer; private List<UdpServer> _udpServers;
private CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource(); private CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource();
private bool _disposed = false; private bool _disposed = false;
@ -60,6 +61,7 @@ namespace Emby.Server.Implementations.EntryPoints
_config = configuration; _config = configuration;
_configurationManager = configurationManager; _configurationManager = configurationManager;
_networkManager = networkManager; _networkManager = networkManager;
_udpServers = new List<UdpServer>();
_enableMultiSocketBinding = OperatingSystem.IsWindows() || OperatingSystem.IsLinux(); _enableMultiSocketBinding = OperatingSystem.IsWindows() || OperatingSystem.IsLinux();
} }
@ -85,15 +87,15 @@ namespace Emby.Server.Implementations.EntryPoints
continue; continue;
} }
_udpServer = new UdpServer(_logger, _appHost, _config, bindAddress.Address, PortNumber); _udpServers.Add(new UdpServer(_logger, _appHost, _config, bindAddress.Address, PortNumber));
_udpServer.Start(_cancellationTokenSource.Token);
} }
} }
else else
{ {
_udpServer = new UdpServer(_logger, _appHost, _config, System.Net.IPAddress.Any, PortNumber); _udpServers.Add(new UdpServer(_logger, _appHost, _config, System.Net.IPAddress.Any, PortNumber));
_udpServer.Start(_cancellationTokenSource.Token);
} }
_udpServers.ForEach(u => u.Start(_cancellationTokenSource.Token));
} }
catch (SocketException ex) catch (SocketException ex)
{ {
@ -121,8 +123,8 @@ namespace Emby.Server.Implementations.EntryPoints
_cancellationTokenSource.Cancel(); _cancellationTokenSource.Cancel();
_cancellationTokenSource.Dispose(); _cancellationTokenSource.Dispose();
_udpServer?.Dispose(); _udpServers.ForEach(s => s.Dispose());
_udpServer = null; _udpServers.Clear();
_disposed = true; _disposed = true;
} }