diff --git a/Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs b/Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs index af9b38815e..b2b3d05260 100644 --- a/Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs +++ b/Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs @@ -1,11 +1,12 @@ -using Ryujinx.Common; -using Ryujinx.Common.Logging; +using Ryujinx.Common.Logging; using Ryujinx.HLE.Utilities; +using System; using System.Buffers.Binary; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Text; +using System.Threading; namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd { @@ -379,13 +380,26 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd } } - try + if (fdsCount != 0) { - System.Net.Sockets.Socket.Select(readEvents, writeEvents, errorEvents, timeout); + try + { + System.Net.Sockets.Socket.Select(readEvents, writeEvents, errorEvents, timeout); + } + catch (SocketException exception) + { + return WriteWinSock2Error(context, (WsaError)exception.ErrorCode); + } } - catch (SocketException exception) + else if (timeout == -1) { - return WriteWinSock2Error(context, (WsaError)exception.ErrorCode); + // FIXME: If we get a timeout of -1 and there is no fds to wait on, this should kill the KProces. (need to check that with re) + throw new InvalidOperationException(); + } + else + { + // FIXME: We should make the KThread sleep but we can't do much about it yet. + Thread.Sleep(timeout); } for (int i = 0; i < fdsCount; i++)