diff --git a/rpcs3/Emu/Cell/lv2/sys_net/lv2_socket_raw.cpp b/rpcs3/Emu/Cell/lv2/sys_net/lv2_socket_raw.cpp index f91cad281c..fa9b86c25e 100644 --- a/rpcs3/Emu/Cell/lv2/sys_net/lv2_socket_raw.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_net/lv2_socket_raw.cpp @@ -67,15 +67,30 @@ std::tuple lv2_socket_raw::getsockopt([[mayb return {}; } -s32 lv2_socket_raw::setsockopt([[maybe_unused]] s32 level, [[maybe_unused]] s32 optname, [[maybe_unused]] const std::vector& optval) +s32 lv2_socket_raw::setsockopt(s32 level, s32 optname, const std::vector& optval) { sys_net.todo("lv2_socket_raw::setsockopt"); + + // TODO + int native_int = *reinterpret_cast*>(optval.data()); + + if (level == SYS_NET_SOL_SOCKET && optname == SYS_NET_SO_NBIO) + { + so_nbio = native_int; + } + return {}; } -std::optional, sys_net_sockaddr>> lv2_socket_raw::recvfrom([[maybe_unused]] s32 flags, [[maybe_unused]] u32 len, [[maybe_unused]] bool is_lock) +std::optional, sys_net_sockaddr>> lv2_socket_raw::recvfrom(s32 flags, [[maybe_unused]] u32 len, [[maybe_unused]] bool is_lock) { sys_net.todo("lv2_socket_raw::recvfrom"); + + if (so_nbio || (flags & SYS_NET_MSG_DONTWAIT)) + { + return {{-SYS_NET_EWOULDBLOCK, {}, {}}}; + } + return {}; }