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