Merge pull request #8796 from sepalani/so-econn

Socket: Fix ENOTCONN error code
This commit is contained in:
Pierre Bourdon 2020-06-19 03:48:13 +02:00 committed by GitHub
commit ebd08c82db
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 8 additions and 10 deletions

View File

@ -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;
}