summaryrefslogtreecommitdiff
path: root/src/core/hle/service/sockets
diff options
context:
space:
mode:
authorGravatar Link45652022-06-28 20:29:41 +0100
committerGravatar Link45652022-07-16 18:30:28 +0100
commit912cae21b070e6f5972ce34a08b25e4ae2182d5c (patch)
tree49f2296ef15ec830a8864a608c4e3c0412a414e0 /src/core/hle/service/sockets
parentMerge pull request #8560 from liamwhite/bitfield-may-alias (diff)
downloadyuzu-912cae21b070e6f5972ce34a08b25e4ae2182d5c.tar.gz
yuzu-912cae21b070e6f5972ce34a08b25e4ae2182d5c.tar.xz
yuzu-912cae21b070e6f5972ce34a08b25e4ae2182d5c.zip
Enable the use of MSG_DONTWAIT flag on RecvImpl
Diffstat (limited to 'src/core/hle/service/sockets')
-rw-r--r--src/core/hle/service/sockets/bsd.cpp20
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)
720 if (!IsFileDescriptorValid(fd)) { 720 if (!IsFileDescriptorValid(fd)) {
721 return {-1, Errno::BADF}; 721 return {-1, Errno::BADF};
722 } 722 }
723 return Translate(file_descriptors[fd]->socket->Recv(flags, message)); 723
724 FileDescriptor& descriptor = *file_descriptors[fd];
725
726 // Apply flags
727 if ((flags & FLAG_MSG_DONTWAIT) != 0) {
728 flags &= ~FLAG_MSG_DONTWAIT;
729 if ((descriptor.flags & FLAG_O_NONBLOCK) == 0) {
730 descriptor.socket->SetNonBlock(true);
731 }
732 }
733
734 const auto [ret, bsd_errno] = Translate(descriptor.socket->Recv(flags, message));
735
736 // Restore original state
737 if ((descriptor.flags & FLAG_O_NONBLOCK) == 0) {
738 descriptor.socket->SetNonBlock(false);
739 }
740
741 return {ret, bsd_errno};
724} 742}
725 743
726std::pair<s32, Errno> BSD::RecvFromImpl(s32 fd, u32 flags, std::vector<u8>& message, 744std::pair<s32, Errno> BSD::RecvFromImpl(s32 fd, u32 flags, std::vector<u8>& message,