From ecd9668e9f90e5358bfb8dff0a6e41a1398c5d97 Mon Sep 17 00:00:00 2001 From: ced777ric Date: Wed, 15 Nov 2023 18:23:13 +0100 Subject: [PATCH 1/3] also read from selectReadList --- LiteNetLib/NetManager.Socket.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/LiteNetLib/NetManager.Socket.cs b/LiteNetLib/NetManager.Socket.cs index aabeaa36..a022dae7 100644 --- a/LiteNetLib/NetManager.Socket.cs +++ b/LiteNetLib/NetManager.Socket.cs @@ -187,21 +187,24 @@ private void NativeReceiveLogic() continue; } bool messageReceived = false; - if (socketv4.Available != 0) + if (socketv4.Available != 0 || selectReadList.Contains(socketv4)) { if (NativeReceiveFrom(ref packet, socketHandle4, addrBuffer4, addrSize4) == false) return; messageReceived = true; } - if (socketV6.Available != 0) + if (socketV6.Available != 0 || selectReadList.Contains(socketV6)) { if (NativeReceiveFrom(ref packet, socketHandle6, addrBuffer6, addrSize6) == false) return; messageReceived = true; } + + selectReadList.Clear(); + if (messageReceived) continue; - selectReadList.Clear(); + selectReadList.Add(socketv4); selectReadList.Add(socketV6); try @@ -270,10 +273,12 @@ private void ReceiveLogic() ReceiveFrom(socketV6, ref bufferEndPoint6); messageReceived = true; } + + selectReadList.Clear(); + if (messageReceived) continue; - selectReadList.Clear(); selectReadList.Add(socketv4); selectReadList.Add(socketV6); Socket.Select(selectReadList, null, null, ReceivePollingTime); From f577f390f063d10e02d1427cdcf6d803d18fd257 Mon Sep 17 00:00:00 2001 From: ced777ric Date: Wed, 15 Nov 2023 18:33:45 +0100 Subject: [PATCH 2/3] repeat for non native --- LiteNetLib/NetManager.Socket.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/LiteNetLib/NetManager.Socket.cs b/LiteNetLib/NetManager.Socket.cs index a022dae7..c7ed5c70 100644 --- a/LiteNetLib/NetManager.Socket.cs +++ b/LiteNetLib/NetManager.Socket.cs @@ -263,12 +263,12 @@ private void ReceiveLogic() else { bool messageReceived = false; - if (socketv4.Available != 0) + if (socketv4.Available != 0 || selectReadList.Contains(socketv4)) { ReceiveFrom(socketv4, ref bufferEndPoint4); messageReceived = true; } - if (socketV6.Available != 0) + if (socketV6.Available != 0 || selectReadList.Contains(socketV6)) { ReceiveFrom(socketV6, ref bufferEndPoint6); messageReceived = true; From 71062a14ca9c8a80fc1d3b86f396a8e59d6f06d3 Mon Sep 17 00:00:00 2001 From: ced777ric Date: Wed, 15 Nov 2023 18:35:57 +0100 Subject: [PATCH 3/3] empty datagrams also have a size of 0 --- LiteNetLib/NetManager.Socket.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/LiteNetLib/NetManager.Socket.cs b/LiteNetLib/NetManager.Socket.cs index c7ed5c70..335ad2be 100644 --- a/LiteNetLib/NetManager.Socket.cs +++ b/LiteNetLib/NetManager.Socket.cs @@ -146,7 +146,8 @@ private bool NativeReceiveFrom(ref NetPacket packet, IntPtr s, byte[] addrBuffer //Reading data packet.Size = NativeSocket.RecvFrom(s, packet.RawData, NetConstants.MaxPacketSize, addrBuffer, ref addrSize); if (packet.Size == 0) - return false; //socket closed + return true; //socket closed or empty packet + if (packet.Size == -1) { var errorCode = NativeSocket.GetSocketError(); @@ -204,7 +205,7 @@ private void NativeReceiveLogic() if (messageReceived) continue; - + selectReadList.Add(socketv4); selectReadList.Add(socketV6); try