|  | @@ -129,17 +129,27 @@ namespace MediaBrowser.Dlna.Ssdp
 | 
	
		
			
				|  |  |              int sendCount = 1)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              var msg = new SsdpMessageBuilder().BuildMessage(header, values);
 | 
	
		
			
				|  |  | +            var queued = false;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            var dgram = new Datagram(endpoint, localAddress, _logger, msg, sendCount, ignoreBindFailure);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            if (_messageQueue.Count == 0)
 | 
	
		
			
				|  |  | +            for (var i = 0; i < sendCount; i++)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                dgram.Send();
 | 
	
		
			
				|  |  | -                return;
 | 
	
		
			
				|  |  | +                var dgram = new Datagram(endpoint, localAddress, _logger, msg, ignoreBindFailure);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                if (_messageQueue.Count == 0)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    dgram.Send();
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                else
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    _messageQueue.Enqueue(dgram);
 | 
	
		
			
				|  |  | +                    queued = true;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            _messageQueue.Enqueue(dgram);
 | 
	
		
			
				|  |  | -            StartQueueTimer();
 | 
	
		
			
				|  |  | +            if (queued)
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                StartQueueTimer();
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -189,8 +199,8 @@ namespace MediaBrowser.Dlna.Ssdp
 | 
	
		
			
				|  |  |                      values["ST"] = d.Type;
 | 
	
		
			
				|  |  |                      values["USN"] = d.USN;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                    SendDatagram(header, values, endpoint, null, true);
 | 
	
		
			
				|  |  | -                    SendDatagram(header, values, endpoint, new IPEndPoint(d.Address, 0), true);
 | 
	
		
			
				|  |  | +                    SendDatagram(header, values, endpoint, null, true, 1);
 | 
	
		
			
				|  |  | +                    SendDatagram(header, values, endpoint, new IPEndPoint(d.Address, 0), true, 1);
 | 
	
		
			
				|  |  |                      //SendDatagram(header, values, endpoint, null, true);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                      if (_config.GetDlnaConfiguration().EnableDebugLogging)
 | 
	
	
		
			
				|  | @@ -208,36 +218,21 @@ namespace MediaBrowser.Dlna.Ssdp
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  |                  if (_queueTimer == null)
 | 
	
		
			
				|  |  |                  {
 | 
	
		
			
				|  |  | -                    _queueTimer = new Timer(QueueTimerCallback, null, 1000, Timeout.Infinite);
 | 
	
		
			
				|  |  | +                    _queueTimer = new Timer(QueueTimerCallback, null, 500, Timeout.Infinite);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |                  else
 | 
	
		
			
				|  |  |                  {
 | 
	
		
			
				|  |  | -                    _queueTimer.Change(1000, Timeout.Infinite);
 | 
	
		
			
				|  |  | +                    _queueTimer.Change(500, Timeout.Infinite);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          private void QueueTimerCallback(object state)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            while (_messageQueue.Count != 0)
 | 
	
		
			
				|  |  | +            Datagram msg;
 | 
	
		
			
				|  |  | +            while (_messageQueue.TryDequeue(out msg))
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                Datagram msg;
 | 
	
		
			
				|  |  | -                if (!_messageQueue.TryPeek(out msg))
 | 
	
		
			
				|  |  | -                {
 | 
	
		
			
				|  |  | -                    continue;
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                if (msg != null && (!_isDisposed || msg.TotalSendCount > 1))
 | 
	
		
			
				|  |  | -                {
 | 
	
		
			
				|  |  | -                    msg.Send();
 | 
	
		
			
				|  |  | -                    if (msg.SendCount > msg.TotalSendCount)
 | 
	
		
			
				|  |  | -                    {
 | 
	
		
			
				|  |  | -                        _messageQueue.TryDequeue(out msg);
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    break;
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                _messageQueue.TryDequeue(out msg);
 | 
	
		
			
				|  |  | +                msg.Send();
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              _datagramPosted.Set();
 |