diff options
author | bunnei <bunneidev@gmail.com> | 2022-07-22 00:43:55 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-22 00:43:55 +0200 |
commit | 6e36f4d230b4760ac8f8f4cd087e0d909fb97e40 (patch) | |
tree | 64cf67d3e8210f4ae9227ac5fc698731ca16c81f /src/core/hle | |
parent | Merge pull request #8607 from lat9nq/sdl-2.0.20 (diff) | |
parent | Enable the use of MSG_DONTWAIT flag on RecvImpl (diff) | |
download | yuzu-6e36f4d230b4760ac8f8f4cd087e0d909fb97e40.tar yuzu-6e36f4d230b4760ac8f8f4cd087e0d909fb97e40.tar.gz yuzu-6e36f4d230b4760ac8f8f4cd087e0d909fb97e40.tar.bz2 yuzu-6e36f4d230b4760ac8f8f4cd087e0d909fb97e40.tar.lz yuzu-6e36f4d230b4760ac8f8f4cd087e0d909fb97e40.tar.xz yuzu-6e36f4d230b4760ac8f8f4cd087e0d909fb97e40.tar.zst yuzu-6e36f4d230b4760ac8f8f4cd087e0d909fb97e40.zip |
Diffstat (limited to 'src/core/hle')
-rw-r--r-- | src/core/hle/service/sockets/bsd.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/core/hle/service/sockets/bsd.cpp b/src/core/hle/service/sockets/bsd.cpp index 5114b8be2..3e9dc4a13 100644 --- a/src/core/hle/service/sockets/bsd.cpp +++ b/src/core/hle/service/sockets/bsd.cpp @@ -720,7 +720,25 @@ std::pair<s32, Errno> BSD::RecvImpl(s32 fd, u32 flags, std::vector<u8>& message) if (!IsFileDescriptorValid(fd)) { return {-1, Errno::BADF}; } - return Translate(file_descriptors[fd]->socket->Recv(flags, message)); + + FileDescriptor& descriptor = *file_descriptors[fd]; + + // Apply flags + if ((flags & FLAG_MSG_DONTWAIT) != 0) { + flags &= ~FLAG_MSG_DONTWAIT; + if ((descriptor.flags & FLAG_O_NONBLOCK) == 0) { + descriptor.socket->SetNonBlock(true); + } + } + + const auto [ret, bsd_errno] = Translate(descriptor.socket->Recv(flags, message)); + + // Restore original state + if ((descriptor.flags & FLAG_O_NONBLOCK) == 0) { + descriptor.socket->SetNonBlock(false); + } + + return {ret, bsd_errno}; } std::pair<s32, Errno> BSD::RecvFromImpl(s32 fd, u32 flags, std::vector<u8>& message, |