From a2857c5a02746d1cfd36d484b61961293de2b889 Mon Sep 17 00:00:00 2001 From: Shadowghost Date: Thu, 21 Jul 2022 10:20:20 +0200 Subject: [PATCH] Check if OS is capable of binding multiple sockets before creating autodiscovery sockets --- .../EntryPoints/UdpServerEntryPoint.cs | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/Emby.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs b/Emby.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs index 9ac2310b4f..46b66dab3e 100644 --- a/Emby.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs +++ b/Emby.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs @@ -31,6 +31,7 @@ namespace Emby.Server.Implementations.EntryPoints private readonly IConfiguration _config; private readonly IConfigurationManager _configurationManager; private readonly INetworkManager _networkManager; + private readonly bool _enableMultiSocketBinding; /// /// The UDP server. @@ -59,6 +60,7 @@ namespace Emby.Server.Implementations.EntryPoints _config = configuration; _configurationManager = configurationManager; _networkManager = networkManager; + _enableMultiSocketBinding = OperatingSystem.IsWindows() || OperatingSystem.IsLinux(); } /// @@ -73,15 +75,23 @@ namespace Emby.Server.Implementations.EntryPoints try { - foreach (var bindAddress in _networkManager.GetInternalBindAddresses()) + if (_enableMultiSocketBinding) { - if (bindAddress.AddressFamily == AddressFamily.InterNetworkV6) + foreach (var bindAddress in _networkManager.GetInternalBindAddresses()) { - // Not supporting IPv6 right now - continue; - } + if (bindAddress.AddressFamily == AddressFamily.InterNetworkV6) + { + // Not supporting IPv6 right now + continue; + } - _udpServer = new UdpServer(_logger, _appHost, _config, bindAddress.Address, PortNumber); + _udpServer = new UdpServer(_logger, _appHost, _config, bindAddress.Address, PortNumber); + _udpServer.Start(_cancellationTokenSource.Token); + } + } + else + { + _udpServer = new UdpServer(_logger, _appHost, _config, System.Net.IPAddress.Any, PortNumber); _udpServer.Start(_cancellationTokenSource.Token); } }