diff --git a/Lidgren.Network/NetPeer.Internal.cs b/Lidgren.Network/NetPeer.Internal.cs index 4a44a3a..1073660 100644 --- a/Lidgren.Network/NetPeer.Internal.cs +++ b/Lidgren.Network/NetPeer.Internal.cs @@ -389,6 +389,9 @@ namespace Lidgren.Network } } + if (m_upnp != null) + m_upnp.CheckForDiscoveryTimeout(); + // // read from socket // diff --git a/Lidgren.Network/NetUPnP.cs b/Lidgren.Network/NetUPnP.cs index 9b44dfa..b983a66 100644 --- a/Lidgren.Network/NetUPnP.cs +++ b/Lidgren.Network/NetUPnP.cs @@ -71,6 +71,7 @@ namespace Lidgren.Network "MAN:\"ssdp:discover\"\r\n" + "MX:3\r\n\r\n"; + m_discoveryResponseDeadline = NetTime.Now + 6.0; // arbitrarily chosen number, router gets 6 seconds to respond m_status = UPnPStatus.Discovering; byte[] arr = System.Text.Encoding.UTF8.GetBytes(str); @@ -79,14 +80,16 @@ namespace Lidgren.Network peer.Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true); peer.RawSend(arr, 0, arr.Length, new NetEndPoint(NetUtility.GetBroadcastAddress(), 1900)); peer.Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, false); - - // allow some extra time for router to respond - NetUtility.Sleep(50); - - m_discoveryResponseDeadline = NetTime.Now + 6.0; // arbitrarily chosen number, router gets 6 seconds to respond - m_status = UPnPStatus.Discovering; } + internal void CheckForDiscoveryTimeout() + { + if ((m_status != UPnPStatus.Discovering) || (NetTime.Now < m_discoveryResponseDeadline)) + return; + m_peer.LogDebug("UPnP discovery timed out"); + m_status = UPnPStatus.NotAvailable; + } + internal void ExtractServiceUrl(string resp) { #if !DEBUG