mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-03 19:17:24 -05:00 
			
		
		
		
	Sending multicasts out of Sockets without setting the broadcast to true - causes the error "Bad value for ai_flags" on some systems (#3404)
The underlying cause looks to be https://github.com/dotnet/runtime/issues/28630. Basically, it's an access denied bug. It looks like multicasts need the same access rights as broadcasts on some systems.
This commit is contained in:
		
							parent
							
								
									c07d8abfd5
								
							
						
					
					
						commit
						f01baad05e
					
				@ -4,7 +4,6 @@ using System;
 | 
				
			|||||||
using System.Net;
 | 
					using System.Net;
 | 
				
			||||||
using System.Net.Sockets;
 | 
					using System.Net.Sockets;
 | 
				
			||||||
using MediaBrowser.Model.Net;
 | 
					using MediaBrowser.Model.Net;
 | 
				
			||||||
using Microsoft.Extensions.Logging;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Emby.Server.Implementations.Net
 | 
					namespace Emby.Server.Implementations.Net
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -123,6 +122,7 @@ namespace Emby.Server.Implementations.Net
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                retVal.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse(ipAddress), localIp));
 | 
					                retVal.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse(ipAddress), localIp));
 | 
				
			||||||
                retVal.MulticastLoopback = true;
 | 
					                retVal.MulticastLoopback = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                return new UdpSocket(retVal, localPort, localIp);
 | 
					                return new UdpSocket(retVal, localPort, localIp);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            catch
 | 
					            catch
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,6 @@
 | 
				
			|||||||
#pragma warning disable CS1591
 | 
					#pragma warning disable CS1591
 | 
				
			||||||
 | 
					
 | 
				
			||||||
using System.Net;
 | 
					using System.Net;
 | 
				
			||||||
using Microsoft.Extensions.Logging;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace MediaBrowser.Model.Net
 | 
					namespace MediaBrowser.Model.Net
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -25,6 +24,5 @@ namespace MediaBrowser.Model.Net
 | 
				
			|||||||
        /// <param name="localPort">The local port to bind to.</param>
 | 
					        /// <param name="localPort">The local port to bind to.</param>
 | 
				
			||||||
        /// <returns>A <see cref="ISocket"/> implementation.</returns>
 | 
					        /// <returns>A <see cref="ISocket"/> implementation.</returns>
 | 
				
			||||||
        ISocket CreateUdpMulticastSocket(string ipAddress, int multicastTimeToLive, int localPort);
 | 
					        ISocket CreateUdpMulticastSocket(string ipAddress, int multicastTimeToLive, int localPort);
 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -338,7 +338,8 @@ namespace Rssdp.Infrastructure
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        private ISocket ListenForBroadcastsAsync()
 | 
					        private ISocket ListenForBroadcastsAsync()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var socket = _SocketFactory.CreateUdpMulticastSocket(SsdpConstants.MulticastLocalAdminAddress, _MulticastTtl, SsdpConstants.MulticastPort);            
 | 
					            var socket = _SocketFactory.CreateUdpMulticastSocket(SsdpConstants.MulticastLocalAdminAddress, _MulticastTtl, SsdpConstants.MulticastPort);
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
            _ = ListenToSocketInternal(socket);
 | 
					            _ = ListenToSocketInternal(socket);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return socket;
 | 
					            return socket;
 | 
				
			||||||
@ -382,7 +383,7 @@ namespace Rssdp.Infrastructure
 | 
				
			|||||||
        private async Task ListenToSocketInternal(ISocket socket)
 | 
					        private async Task ListenToSocketInternal(ISocket socket)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var cancelled = false;
 | 
					            var cancelled = false;
 | 
				
			||||||
            var receiveBuffer = new byte[8192]; 
 | 
					            var receiveBuffer = new byte[8192];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            while (!cancelled && !IsDisposed)
 | 
					            while (!cancelled && !IsDisposed)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user