Skip to content

Commit

Permalink
Merge pull request #534 from ced777ric/master
Browse files Browse the repository at this point in the history
Fix Linux Specific Softlock on empty datagrams
  • Loading branch information
RevenantX authored Nov 15, 2023
2 parents 3220c1c + 71062a1 commit 57356a9
Showing 1 changed file with 13 additions and 7 deletions.
20 changes: 13 additions & 7 deletions LiteNetLib/NetManager.Socket.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -187,21 +188,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
Expand Down Expand Up @@ -260,20 +264,22 @@ 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;
}

selectReadList.Clear();

if (messageReceived)
continue;

selectReadList.Clear();
selectReadList.Add(socketv4);
selectReadList.Add(socketV6);
Socket.Select(selectReadList, null, null, ReceivePollingTime);
Expand Down

0 comments on commit 57356a9

Please sign in to comment.