Added logging and broadcast = true

Not intended for merge into the fork.
This commit is contained in:
BaronGreenback 2020-06-24 14:31:17 +01:00
parent 2486e48097
commit 5b0c182908
3 changed files with 27 additions and 7 deletions

View File

@ -4,6 +4,7 @@ using System;
using System.Net;
using System.Net.Sockets;
using MediaBrowser.Model.Net;
using Microsoft.Extensions.Logging;
namespace Emby.Server.Implementations.Net
{
@ -67,7 +68,7 @@ namespace Emby.Server.Implementations.Net
/// <param name="multicastTimeToLive">The multicast time to live value for the acceptSocket.</param>
/// <param name="localPort">The number of the local port to bind to.</param>
/// <returns></returns>
public ISocket CreateUdpMulticastSocket(string ipAddress, int multicastTimeToLive, int localPort)
public ISocket CreateUdpMulticastSocket(string ipAddress, int multicastTimeToLive, int localPort, ILogger _logger)
{
if (ipAddress == null)
{
@ -89,6 +90,8 @@ namespace Emby.Server.Implementations.Net
throw new ArgumentException("localPort cannot be less than zero.", nameof(localPort));
}
_logger.LogError("Created");
var retVal = new Socket(AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Dgram, System.Net.Sockets.ProtocolType.Udp);
try
@ -100,6 +103,8 @@ namespace Emby.Server.Implementations.Net
{
}
_logger.LogError("Exclusive false");
try
{
// seeing occasional exceptions thrown on qnap
@ -110,8 +115,14 @@ namespace Emby.Server.Implementations.Net
{
}
_logger.LogError("Reused");
try
{
retVal.EnableBroadcast = true; // CHANGE
_logger.LogError("Broadcast");
// retVal.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
retVal.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, multicastTimeToLive);
@ -120,6 +131,8 @@ namespace Emby.Server.Implementations.Net
retVal.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse(ipAddress), localIp));
retVal.MulticastLoopback = true;
_logger.LogError("Sorted");
return new UdpSocket(retVal, localPort, localIp);
}
catch

View File

@ -1,6 +1,7 @@
#pragma warning disable CS1591
using System.Net;
using Microsoft.Extensions.Logging;
namespace MediaBrowser.Model.Net
{
@ -22,7 +23,9 @@ namespace MediaBrowser.Model.Net
/// <param name="ipAddress">The multicast IP address to bind to.</param>
/// <param name="multicastTimeToLive">The multicast time to live value. Actually a maximum number of network hops for UDP packets.</param>
/// <param name="localPort">The local port to bind to.</param>
/// <param name="logger"></param>
/// <returns>A <see cref="ISocket"/> implementation.</returns>
ISocket CreateUdpMulticastSocket(string ipAddress, int multicastTimeToLive, int localPort);
ISocket CreateUdpMulticastSocket(string ipAddress, int multicastTimeToLive, int localPort, ILogger logger);
}
}

View File

@ -338,9 +338,12 @@ namespace Rssdp.Infrastructure
private ISocket ListenForBroadcastsAsync()
{
var socket = _SocketFactory.CreateUdpMulticastSocket(SsdpConstants.MulticastLocalAdminAddress, _MulticastTtl, SsdpConstants.MulticastPort);
var socket = _SocketFactory.CreateUdpMulticastSocket(SsdpConstants.MulticastLocalAdminAddress, _MulticastTtl, SsdpConstants.MulticastPort, _logger);
_ = ListenToSocketInternal(socket);
// TODO: remove this try and logging - testing purposes only.
_logger.LogError("Socket Created.");
_ = ListenToSocketInternal(socket, _logger);
return socket;
}
@ -374,16 +377,16 @@ namespace Rssdp.Infrastructure
foreach (var socket in sockets)
{
_ = ListenToSocketInternal(socket);
_ = ListenToSocketInternal(socket, _logger);
}
return sockets;
}
private async Task ListenToSocketInternal(ISocket socket)
private async Task ListenToSocketInternal(ISocket socket, ILogger logger)
{
var cancelled = false;
var receiveBuffer = new byte[8192];
var receiveBuffer = new byte[8192];
while (!cancelled && !IsDisposed)
{
@ -393,6 +396,7 @@ namespace Rssdp.Infrastructure
if (result.ReceivedBytes > 0)
{
_logger.LogError("processing...");
// Strange cannot convert compiler error here if I don't explicitly
// assign or cast to Action first. Assignment is easier to read,
// so went with that.