From 19915badeea214c031be3df65a7cea6bce76c264 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)) {