From 8febd34d433a09e9f4211e5a49ce1869015a5b06 Mon Sep 17 00:00:00 2001 From: RipleyTom Date: Fri, 9 Jun 2023 02:17:49 +0200 Subject: [PATCH] Fix consecutive connect on the same socket on windows --- rpcs3/Emu/Cell/lv2/sys_net/lv2_socket_native.cpp | 2 +- rpcs3/Emu/Cell/lv2/sys_net/sys_net_helpers.cpp | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/rpcs3/Emu/Cell/lv2/sys_net/lv2_socket_native.cpp b/rpcs3/Emu/Cell/lv2/sys_net/lv2_socket_native.cpp index b044a9671e2d..d268ae19b9e1 100644 --- a/rpcs3/Emu/Cell/lv2/sys_net/lv2_socket_native.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_net/lv2_socket_native.cpp @@ -216,7 +216,7 @@ std::optional lv2_socket_native::connect(const sys_net_sockaddr& addr) return CELL_OK; } - sys_net_error result = get_last_error(!so_nbio); + sys_net_error result = get_last_error(!so_nbio, connecting); if (result) { diff --git a/rpcs3/Emu/Cell/lv2/sys_net/sys_net_helpers.cpp b/rpcs3/Emu/Cell/lv2/sys_net/sys_net_helpers.cpp index 637a842fe252..20fa54a7c103 100644 --- a/rpcs3/Emu/Cell/lv2/sys_net/sys_net_helpers.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_net/sys_net_helpers.cpp @@ -88,10 +88,19 @@ sys_net_error convert_error(bool is_blocking, int native_error, [[maybe_unused]] } #ifdef _WIN32 - // Windows will return SYS_NET_ENOTCONN when recvfrom/sendto is called on a socket that is connecting but not yet connected - if (is_connecting && result == SYS_NET_ENOTCONN) + if (is_connecting) { - return SYS_NET_EAGAIN; + // Windows will return SYS_NET_ENOTCONN when recvfrom/sendto is called on a socket that is connecting but not yet connected + if (result == SYS_NET_ENOTCONN) + { + return SYS_NET_EAGAIN; + } + + // Windows will return SYS_NET_EINVAL when using connect on a non-blocking socket that is already attempting a connection + if (result == SYS_NET_EINVAL) + { + return SYS_NET_EALREADY; + } } #endif