mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-11-12 09:09:29 +01:00
sceNetInet: errno per thread as on hardware, and the socket table
errno: - A thread that hasn't made a call yet reads 0x80410001 from GetErrno, as the PSP has no errno record for it until then. errno is saved in savestates now, in a new sceNet section version. - socket(), close() and setsockopt() clear it when they succeed. - Running out of descriptors is EMFILE, at 255 like the PSP, and an unconnected UDP socket sending without an address EDESTADDRREQ, which Winsock calls ENOTCONN. - On Windows, ENOBUFS, EPROTOTYPE, ENOPROTOOPT, EMSGSIZE, ENETRESET and EDESTADDRREQ now map to the PSP's errnos. They only did elsewhere. All from pspautotests net/inet/errors, options and errnothread. The socket table: - Descriptor numbers are handed out round-robin up to 255, as on the PSP (net/inet/states), rather than the lowest free one. - Closing frees the slot even if the host's close fails, and Close and CloseAll take the lock the rest of SocketManager does. - accept no longer leaks the host socket when it runs out of numbers. - bind no longer asks UPnP to forward port 0, and closing the socket removes its forward, unless another socket still uses the port. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
be9c244938
commit
79537d18bd
8 files changed
+208
-77
No files matched your search
+2
-2
@@ -713,7 +713,7 @@ void netValidateLoopMemory() {
|
||||
|
||||
// This feels like a dubious proposition, mostly...
|
||||
void __NetDoState(PointerWrap &p) {
|
||||
auto s = p.Section("sceNet", 1, 8);
|
||||
auto s = p.Section("sceNet", 1, 9);
|
||||
if (!s)
|
||||
return;
|
||||
|
||||
@@ -781,7 +781,7 @@ void __NetDoState(PointerWrap &p) {
|
||||
apctlEvents.clear();
|
||||
apctlProdCodeAddr = 0;
|
||||
}
|
||||
__NetInetDoState(p, s >= 8);
|
||||
__NetInetDoState(p, s >= 8, s >= 9);
|
||||
|
||||
if (p.mode == p.MODE_READ) {
|
||||
// Let's not change "Inited" value when Loading SaveState in the middle of multiplayer to prevent memory & port leaks
|
||||
|
||||
Reference in new issue
Block a user