From de3bd3c50d629a9a98b7f9643c973eaee725aa38 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 b2414bc12..31d93cadf 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)) {