From df99257d7f30f3952ca9e2a1386339777eec3327 Mon Sep 17 00:00:00 2001 From: Mary Date: Thu, 1 Sep 2022 22:27:35 +0200 Subject: [PATCH] bsd: improve socket poll We should report errors even when not requested. This also ensure we only clear the bits that were requested on the output. Finally, this fix when input events is 0. --- .../Sockets/Bsd/Impl/ManagedSocketPollManager.cs | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/ManagedSocketPollManager.cs b/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/ManagedSocketPollManager.cs index b2414bc12f..31d93cadf1 100644 --- a/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/ManagedSocketPollManager.cs +++ b/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/ManagedSocketPollManager.cs @@ -38,12 +38,13 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd { ManagedSocket socket = (ManagedSocket)evnt.FileDescriptor; - bool isValidEvent = false; + bool isValidEvent = evnt.Data.InputEvents == 0; + + errorEvents.Add(socket.Socket); if ((evnt.Data.InputEvents & PollEventTypeMask.Input) != 0) { readEvents.Add(socket.Socket); - errorEvents.Add(socket.Socket); isValidEvent = true; } @@ -51,7 +52,6 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd if ((evnt.Data.InputEvents & PollEventTypeMask.UrgentInput) != 0) { readEvents.Add(socket.Socket); - errorEvents.Add(socket.Socket); isValidEvent = true; } @@ -59,14 +59,6 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd if ((evnt.Data.InputEvents & PollEventTypeMask.Output) != 0) { writeEvents.Add(socket.Socket); - errorEvents.Add(socket.Socket); - - isValidEvent = true; - } - - if ((evnt.Data.InputEvents & PollEventTypeMask.Error) != 0) - { - errorEvents.Add(socket.Socket); isValidEvent = true; } @@ -93,7 +85,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd { Socket socket = ((ManagedSocket)evnt.FileDescriptor).Socket; - PollEventTypeMask outputEvents = 0; + PollEventTypeMask outputEvents = evnt.Data.OutputEvents & ~evnt.Data.InputEvents; if (errorEvents.Contains(socket)) {