mirror of
https://github.com/cemu-project/Cemu.git
synced 2024-11-22 09:09:18 +01:00
nsysnet: Add support for SO_BIO and handle SO_ENOTCONN
This commit is contained in:
parent
d2ba4e65c5
commit
bab1616565
@ -256,10 +256,8 @@ namespace nn
|
||||
this->flags = 0;
|
||||
memset(this->titleText, 0, sizeof(this->titleText));
|
||||
memset(this->description, 0, sizeof(this->description));
|
||||
int v2 = 0;
|
||||
do
|
||||
memset(this->searchKeys[v2++], 0, sizeof(this->searchKeys[v2++]));
|
||||
while (v2 < 5);
|
||||
for (int i = 0; i < 5; i++)
|
||||
memset(this->searchKeys[i], 0, sizeof(this->searchKeys[0]));
|
||||
}
|
||||
static UploadCommunityDataParam* __ctor(UploadCommunityDataParam* _this)
|
||||
{
|
||||
|
@ -13,6 +13,7 @@
|
||||
#define WSAESHUTDOWN ESHUTDOWN
|
||||
#define WSAECONNABORTED ECONNABORTED
|
||||
#define WSAHOST_NOT_FOUND EAI_NONAME
|
||||
#define WSAENOTCONN ENOTCONN
|
||||
|
||||
#define GETLASTERR errno
|
||||
|
||||
@ -40,6 +41,7 @@
|
||||
#define WU_SO_RCVBUF 0x1002
|
||||
#define WU_SO_LASTERROR 0x1007
|
||||
#define WU_SO_NBIO 0x1014
|
||||
#define WU_SO_BIO 0x1015
|
||||
#define WU_SO_NONBLOCK 0x1016
|
||||
|
||||
#define WU_TCP_NODELAY 0x2004
|
||||
@ -53,6 +55,7 @@
|
||||
#define WU_SO_SUCCESS 0x0000
|
||||
#define WU_SO_EWOULDBLOCK 0x0006
|
||||
#define WU_SO_ECONNRESET 0x0008
|
||||
#define WU_SO_ENOTCONN 0x0009
|
||||
#define WU_SO_EINVAL 0x000B
|
||||
#define WU_SO_EINPROGRESS 0x0016
|
||||
#define WU_SO_EAFNOSUPPORT 0x0021
|
||||
@ -148,8 +151,11 @@ sint32 _translateError(sint32 returnCode, sint32 wsaError, sint32 mode = _ERROR_
|
||||
case WSAESHUTDOWN:
|
||||
_setSockError(WU_SO_ESHUTDOWN);
|
||||
break;
|
||||
case WSAENOTCONN:
|
||||
_setSockError(WU_SO_ENOTCONN);
|
||||
break;
|
||||
default:
|
||||
cemuLog_logDebug(LogType::Force, "Unhandled wsaError {}\n", wsaError);
|
||||
cemuLog_logDebug(LogType::Force, "Unhandled wsaError {}", wsaError);
|
||||
_setSockError(99999); // unhandled error
|
||||
}
|
||||
return -1;
|
||||
@ -157,7 +163,7 @@ sint32 _translateError(sint32 returnCode, sint32 wsaError, sint32 mode = _ERROR_
|
||||
|
||||
void nsysnetExport_socketlasterr(PPCInterpreter_t* hCPU)
|
||||
{
|
||||
cemuLog_log(LogType::Socket, "socketlasterr() -> {}", _getSockError());
|
||||
cemuLog_logDebug(LogType::Socket, "socketlasterr() -> {}", _getSockError());
|
||||
osLib_returnFromFunction(hCPU, _getSockError());
|
||||
}
|
||||
|
||||
@ -485,9 +491,9 @@ void nsysnetExport_setsockopt(PPCInterpreter_t* hCPU)
|
||||
if (r != 0)
|
||||
cemu_assert_suspicious();
|
||||
}
|
||||
else if (optname == WU_SO_NBIO)
|
||||
else if (optname == WU_SO_NBIO || optname == WU_SO_BIO)
|
||||
{
|
||||
// similar to WU_SO_NONBLOCK but always sets non-blocking mode regardless of option value
|
||||
// similar to WU_SO_NONBLOCK but always sets blocking (_BIO) or non-blocking (_NBIO) mode regardless of option value
|
||||
if (optlen == 4)
|
||||
{
|
||||
sint32 optvalLE = _swapEndianU32(*(uint32*)optval);
|
||||
@ -498,9 +504,10 @@ void nsysnetExport_setsockopt(PPCInterpreter_t* hCPU)
|
||||
}
|
||||
else
|
||||
cemu_assert_suspicious();
|
||||
u_long mode = 1;
|
||||
bool setNonBlocking = optname == WU_SO_NBIO;
|
||||
u_long mode = setNonBlocking ? 1 : 0;
|
||||
_socket_nonblock(vs->s, mode);
|
||||
vs->isNonBlocking = true;
|
||||
vs->isNonBlocking = setNonBlocking;
|
||||
}
|
||||
else if (optname == WU_SO_NONBLOCK)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user