mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-08-02 07:22:24 +00:00
RE sceNetAccept
This commit is contained in:
parent
1c249f9d06
commit
1832e7d79b
@ -69,8 +69,45 @@ int PS4_SYSV_ABI sce_net_in6addr_nodelocal_allnodes() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
OrbisNetId PS4_SYSV_ABI sceNetAccept(OrbisNetId s, OrbisNetSockaddr* addr, u32* paddrlen) {
|
OrbisNetId PS4_SYSV_ABI sceNetAccept(OrbisNetId s, OrbisNetSockaddr* addr, u32* paddrlen) {
|
||||||
LOG_ERROR(Lib_Net, "(STUBBED) called");
|
if (!g_isNetInitialized) {
|
||||||
return ORBIS_OK;
|
return ORBIS_NET_ERROR_ENOTINIT;
|
||||||
|
}
|
||||||
|
int result;
|
||||||
|
int err;
|
||||||
|
int positiveErr;
|
||||||
|
|
||||||
|
do {
|
||||||
|
result = sys_accept(s, addr, paddrlen);
|
||||||
|
|
||||||
|
if (result >= 0) {
|
||||||
|
return result; // Success
|
||||||
|
}
|
||||||
|
|
||||||
|
err = *Libraries::Kernel::__Error(); // Standard errno
|
||||||
|
|
||||||
|
// Convert to positive error for comparison
|
||||||
|
int positiveErr = (err < 0) ? -err : err;
|
||||||
|
|
||||||
|
if ((positiveErr & 0xfff0000) != 0) {
|
||||||
|
// Unknown/fatal error range
|
||||||
|
*sceNetErrnoLoc() = ORBIS_NET_ERETURN;
|
||||||
|
return -positiveErr;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retry if interrupted
|
||||||
|
} while (positiveErr == ORBIS_NET_EINTR);
|
||||||
|
|
||||||
|
if (positiveErr == ORBIS_NET_EADDRINUSE) {
|
||||||
|
result = -ORBIS_NET_EBADF;
|
||||||
|
} else if (positiveErr == ORBIS_NET_EALREADY) {
|
||||||
|
result = -ORBIS_NET_EINTR;
|
||||||
|
} else {
|
||||||
|
result = -positiveErr;
|
||||||
|
}
|
||||||
|
|
||||||
|
*sceNetErrnoLoc() = -result;
|
||||||
|
|
||||||
|
return (-result) | ORBIS_NET_ERROR_BASE; // Convert to official ORBIS_NET_ERROR code
|
||||||
}
|
}
|
||||||
|
|
||||||
int PS4_SYSV_ABI sceNetAddrConfig6GetInfo() {
|
int PS4_SYSV_ABI sceNetAddrConfig6GetInfo() {
|
||||||
|
@ -7,10 +7,13 @@
|
|||||||
|
|
||||||
namespace Libraries::Net {
|
namespace Libraries::Net {
|
||||||
|
|
||||||
int sys_connect(OrbisNetId s, OrbisNetSockaddr* addr, u32 addrlen) {
|
int sys_connect(OrbisNetId s, const OrbisNetSockaddr* addr, u32 addrlen) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
int sys_bind(OrbisNetId s, OrbisNetSockaddr* addr, u32 addrlen) {
|
int sys_bind(OrbisNetId s, const OrbisNetSockaddr* addr, u32 addrlen) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
int sys_accept(OrbisNetId s, const OrbisNetSockaddr* addr, u32* paddrlen) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
} // namespace Libraries::Net
|
} // namespace Libraries::Net
|
@ -8,7 +8,8 @@
|
|||||||
|
|
||||||
namespace Libraries::Net {
|
namespace Libraries::Net {
|
||||||
|
|
||||||
int sys_connect(OrbisNetId s, OrbisNetSockaddr* addr, u32 addrlen);
|
int sys_connect(OrbisNetId s, const OrbisNetSockaddr* addr, u32 addrlen);
|
||||||
int sys_bind(OrbisNetId s, OrbisNetSockaddr* addr, u32 addrlen);
|
int sys_bind(OrbisNetId s, const OrbisNetSockaddr* addr, u32 addrlen);
|
||||||
|
int sys_accept(OrbisNetId s, const OrbisNetSockaddr* addr, u32* paddrlen);
|
||||||
|
|
||||||
} // namespace Libraries::Net
|
} // namespace Libraries::Net
|
Loading…
Reference in New Issue
Block a user