Skip to content

Commit 2e1c599

Browse files
committed
Unregister sockets properly on close
1 parent 634dc1a commit 2e1c599

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

Core/HLE/sceNetInet.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -800,9 +800,16 @@ static int sceNetInetClose(int socket) {
800800
}
801801

802802
int retVal = closesocket(inetSock->sock);
803+
if (retVal == 0) {
804+
inetSock->sock = 0;
805+
inetSock->state = SocketState::Unused;
806+
} else {
807+
ERROR_LOG(Log::sceNet, "closesocket(%d) failed (socket=%d)", inetSock->sock, socket);
808+
}
803809
return hleLogSuccessI(Log::sceNet, retVal);
804810
}
805811

812+
// TODO: How is this different than just sceNetInetClose?
806813
static int sceNetInetCloseWithRST(int socket) {
807814
WARN_LOG(Log::sceNet, "UNTESTED %s(%i) at %08x", __FUNCTION__, socket, currentMIPS->pc);
808815

@@ -817,6 +824,12 @@ static int sceNetInetCloseWithRST(int socket) {
817824
sl.l_linger = 0; // timeout interval in seconds
818825
setsockopt(inetSock->sock, SOL_SOCKET, SO_LINGER, (const char*)&sl, sizeof(sl));
819826
int retVal = closesocket(inetSock->sock);
827+
if (retVal == 0) {
828+
inetSock->sock = 0;
829+
inetSock->state = SocketState::Unused;
830+
} else {
831+
ERROR_LOG(Log::sceNet, "closesocket(%d) failed (socket=%d)", inetSock->sock, socket);
832+
}
820833
return hleLogSuccessI(Log::sceNet, retVal);
821834
}
822835

0 commit comments

Comments
 (0)