diff --git a/MediaBrowser.Dlna/Ssdp/Datagram.cs b/MediaBrowser.Dlna/Ssdp/Datagram.cs index cca59720f4..0a6d273037 100644 --- a/MediaBrowser.Dlna/Ssdp/Datagram.cs +++ b/MediaBrowser.Dlna/Ssdp/Datagram.cs @@ -30,7 +30,7 @@ namespace MediaBrowser.Dlna.Ssdp { var msg = Encoding.ASCII.GetBytes(Message); - var socket = CreateSocket(); + var socket = CreateSocket(!IgnoreBindFailure); if (socket == null) { @@ -102,13 +102,20 @@ namespace MediaBrowser.Dlna.Ssdp } } - private Socket CreateSocket() + private Socket CreateSocket(bool isBroadcast) { try { var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); + + if (isBroadcast) + { + socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true); + socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 4); + } + return socket; } catch (Exception ex) diff --git a/MediaBrowser.Dlna/Ssdp/DeviceDiscovery.cs b/MediaBrowser.Dlna/Ssdp/DeviceDiscovery.cs index 94342bf31e..3befa221b0 100644 --- a/MediaBrowser.Dlna/Ssdp/DeviceDiscovery.cs +++ b/MediaBrowser.Dlna/Ssdp/DeviceDiscovery.cs @@ -87,11 +87,14 @@ namespace MediaBrowser.Dlna.Ssdp try { - var ip = _appHost.LocalIpAddress; - - if (!string.IsNullOrWhiteSpace(ip)) + if (e.LocalEndPoint == null) + { + var ip = _appHost.LocalIpAddress; + e.LocalEndPoint = new IPEndPoint(IPAddress.Parse(ip), 0); + } + + if (e.LocalEndPoint != null) { - e.LocalIp = IPAddress.Parse(ip); TryCreateDevice(e); } } @@ -140,7 +143,7 @@ namespace MediaBrowser.Dlna.Ssdp { var args = SsdpHelper.ParseSsdpResponse(receiveBuffer); args.EndPoint = endPoint; - args.LocalIp = localIp; + args.LocalEndPoint = new IPEndPoint(localIp, 0); if (!_ssdpHandler.IsSelfNotification(args)) {