BSD: Allow use of DontWait flag in Receive (#3462)

This commit is contained in:
Fruityloops 2022-07-14 09:47:25 +00:00 committed by GitHub
parent 7853faa334
commit 70ec5def9c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -184,18 +184,35 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd
public LinuxError Receive(out int receiveSize, Span<byte> buffer, BsdSocketFlags flags) public LinuxError Receive(out int receiveSize, Span<byte> buffer, BsdSocketFlags flags)
{ {
LinuxError result;
bool shouldBlockAfterOperation = false;
try try
{ {
if (Blocking && flags.HasFlag(BsdSocketFlags.DontWait))
{
Blocking = false;
shouldBlockAfterOperation = true;
}
receiveSize = Socket.Receive(buffer, ConvertBsdSocketFlags(flags)); receiveSize = Socket.Receive(buffer, ConvertBsdSocketFlags(flags));
return LinuxError.SUCCESS; result = LinuxError.SUCCESS;
} }
catch (SocketException exception) catch (SocketException exception)
{ {
receiveSize = -1; receiveSize = -1;
return WinSockHelper.ConvertError((WsaError)exception.ErrorCode); result = WinSockHelper.ConvertError((WsaError)exception.ErrorCode);
} }
if (shouldBlockAfterOperation)
{
Blocking = true;
}
return result;
} }
public LinuxError ReceiveFrom(out int receiveSize, Span<byte> buffer, int size, BsdSocketFlags flags, out IPEndPoint remoteEndPoint) public LinuxError ReceiveFrom(out int receiveSize, Span<byte> buffer, int size, BsdSocketFlags flags, out IPEndPoint remoteEndPoint)