aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Networking/Udp
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Networking/Udp')
-rw-r--r--MediaBrowser.Networking/Udp/UdpServer.cs40
1 files changed, 38 insertions, 2 deletions
diff --git a/MediaBrowser.Networking/Udp/UdpServer.cs b/MediaBrowser.Networking/Udp/UdpServer.cs
index 9b1c254cf..00eb2a0d1 100644
--- a/MediaBrowser.Networking/Udp/UdpServer.cs
+++ b/MediaBrowser.Networking/Udp/UdpServer.cs
@@ -1,4 +1,5 @@
using MediaBrowser.Common.Net;
+using MediaBrowser.Model.Logging;
using MediaBrowser.Networking.Management;
using System;
using System.Net;
@@ -20,6 +21,21 @@ namespace MediaBrowser.Networking.Udp
public event EventHandler<UdpMessageReceivedEventArgs> MessageReceived;
/// <summary>
+ /// Gets or sets the logger.
+ /// </summary>
+ /// <value>The logger.</value>
+ private ILogger Logger { get; set; }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="UdpServer" /> class.
+ /// </summary>
+ /// <param name="logger">The logger.</param>
+ public UdpServer(ILogger logger)
+ {
+ Logger = logger;
+ }
+
+ /// <summary>
/// Raises the <see cref="E:MessageReceived" /> event.
/// </summary>
/// <param name="e">The <see cref="UdpMessageReceivedEventArgs" /> instance containing the event data.</param>
@@ -54,8 +70,24 @@ namespace MediaBrowser.Networking.Udp
private IObservable<UdpReceiveResult> CreateObservable()
{
return Observable.Create<UdpReceiveResult>(obs =>
- Observable.FromAsync(() => _udpClient.ReceiveAsync())
- .Subscribe(obs))
+ Observable.FromAsync(() =>
+ {
+ try
+ {
+ return _udpClient.ReceiveAsync();
+ }
+ catch (ObjectDisposedException)
+ {
+ return Task.FromResult(new UdpReceiveResult(new byte[]{}, new IPEndPoint(IPAddress.Any, 0)));
+ }
+ catch (Exception ex)
+ {
+ Logger.ErrorException("Error receiving udp message", ex);
+ return Task.FromResult(new UdpReceiveResult(new byte[] { }, new IPEndPoint(IPAddress.Any, 0)));
+ }
+ })
+
+ .Subscribe(obs))
.Repeat()
.Retry()
.Publish()
@@ -68,6 +100,10 @@ namespace MediaBrowser.Networking.Udp
/// <param name="message">The message.</param>
private void OnMessageReceived(UdpReceiveResult message)
{
+ if (message.RemoteEndPoint.Port == 0)
+ {
+ return;
+ }
var bytes = message.Buffer;
OnMessageReceived(new UdpMessageReceivedEventArgs