From dc2733ce249f17afe97b80372b3306c3c5b27af1 Mon Sep 17 00:00:00 2001 From: Sepalani Date: Thu, 7 May 2020 00:03:03 +0400 Subject: [PATCH] Socket: Fix ENOTCONN error code --- Source/Core/Core/IOS/Network/Socket.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/Source/Core/Core/IOS/Network/Socket.cpp b/Source/Core/Core/IOS/Network/Socket.cpp index 2435486182..b2ff4c6795 100644 --- a/Source/Core/Core/IOS/Network/Socket.cpp +++ b/Source/Core/Core/IOS/Network/Socket.cpp @@ -51,7 +51,12 @@ char* WiiSockMan::DecodeError(s32 ErrorCode) #endif } -static s32 TranslateErrorCode(s32 native_error, bool isRW) +// The following functions can return +// - EAGAIN / EWOULDBLOCK: send(to), recv(from), accept +// - EINPROGRESS: connect, bind +// - WSAEWOULDBLOCK: send(to), recv(from), accept, connect +// On Windows is_rw is used to correct the return value for connect +static s32 TranslateErrorCode(s32 native_error, bool is_rw) { switch (native_error) { @@ -67,7 +72,7 @@ static s32 TranslateErrorCode(s32 native_error, bool isRW) case ERRORCODE(EISCONN): return -SO_EISCONN; case ERRORCODE(ENOTCONN): - return -SO_EAGAIN; // After proper blocking SO_EAGAIN shouldn't be needed... + return -SO_ENOTCONN; case ERRORCODE(EINPROGRESS): return -SO_EINPROGRESS; case ERRORCODE(EALREADY): @@ -86,14 +91,7 @@ static s32 TranslateErrorCode(s32 native_error, bool isRW) case ERRORCODE(ENETRESET): return -SO_ENETRESET; case EITHER(WSAEWOULDBLOCK, EAGAIN): - if (isRW) - { - return -SO_EAGAIN; // EAGAIN - } - else - { - return -SO_EINPROGRESS; // EINPROGRESS - } + return (is_rw) ? (-SO_EAGAIN) : (-SO_EINPROGRESS); default: return -1; }