From 689800c377423cfff3e6aeeac097c41ad28428bc Mon Sep 17 00:00:00 2001 From: Derek S <44935661+Derek-R-S@users.noreply.github.com> Date: Mon, 5 Apr 2021 23:54:37 -0500 Subject: [PATCH] Made NATPunch socket keep trying if bind failed (Thanks FakeByte!) --- .../LightReflectiveMirrorTransport.cs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/UnityTransport/LightReflectiveMirrorTransport.cs b/UnityTransport/LightReflectiveMirrorTransport.cs index 1d5331b..a8e93cf 100644 --- a/UnityTransport/LightReflectiveMirrorTransport.cs +++ b/UnityTransport/LightReflectiveMirrorTransport.cs @@ -433,10 +433,21 @@ namespace LightReflectiveMirror initalData.WriteString(ref sendPos, data.ReadString(ref pos)); NATPunchtroughPort = data.ReadInt(ref pos); - _NATPuncher = new UdpClient { ExclusiveAddressUse = false }; - _NATIP = new IPEndPoint(IPAddress.Parse(GetLocalIp()), UnityEngine.Random.Range(16000, 17000)); - _NATPuncher.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); - _NATPuncher.Client.Bind(_NATIP); + if (_NATPuncher == null) + { + _NATPuncher = new UdpClient { ExclusiveAddressUse = false }; + while (true) + { + try + { + _NATIP = new IPEndPoint(IPAddress.Parse(GetLocalIp()), UnityEngine.Random.Range(16000, 17000)); + _NATPuncher.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); + _NATPuncher.Client.Bind(_NATIP); + break; + } + catch {} // Binding port is in use, keep trying :P + } + } IPAddress serverAddr;