From d493525050ca53e4d87c1ac039a4f6f389bdeb32 Mon Sep 17 00:00:00 2001 From: Matthew Parlane Date: Wed, 28 Aug 2013 00:37:45 +1200 Subject: [PATCH] Add socket cleanup. Don't know what to do with remaining sockops if called from a SetRegister reset command. --- .../Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp | 15 +++------------ Source/Core/Core/Src/IPC_HLE/WII_Socket.cpp | 2 +- Source/Core/Core/Src/IPC_HLE/WII_Socket.h | 5 +++++ 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp index 994abe87a9..6db76fb129 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp @@ -55,6 +55,7 @@ CWII_IPC_HLE_Device_net_kd_request::CWII_IPC_HLE_Device_net_kd_request(u32 _Devi CWII_IPC_HLE_Device_net_kd_request::~CWII_IPC_HLE_Device_net_kd_request() { + WiiSockMan::getInstance().clean(); } bool CWII_IPC_HLE_Device_net_kd_request::Open(u32 _CommandAddress, u32 _Mode) @@ -680,6 +681,7 @@ bool CWII_IPC_HLE_Device_net_ip_top::IOCtl(u32 _CommandAddress) fd, ReturnValue); break; } + case IOCTL_SO_ACCEPT: case IOCTL_SO_BIND: case IOCTL_SO_CONNECT: case IOCTL_SO_FCNTL: @@ -690,20 +692,9 @@ bool CWII_IPC_HLE_Device_net_ip_top::IOCtl(u32 _CommandAddress) return false; break; } - case IOCTL_SO_ACCEPT: - { - u32 fd = Memory::Read_U32(BufferIn); - WiiSockMan &sm = WiiSockMan::getInstance(); - sm.doSock(fd, _CommandAddress, (NET_IOCTL)Command); - return false; - break; - } - ///////////////////////////////////////////////////////////// - // TODO: ALL BELOW // + // TODO: Tidy all below // ///////////////////////////////////////////////////////////// - - case IOCTL_SO_SHUTDOWN: { WARN_LOG(WII_IPC_NET, "IOCTL_SO_SHUTDOWN " diff --git a/Source/Core/Core/Src/IPC_HLE/WII_Socket.cpp b/Source/Core/Core/Src/IPC_HLE/WII_Socket.cpp index f524dd847d..7d494f4fc1 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_Socket.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_Socket.cpp @@ -628,7 +628,7 @@ void WiiSockMan::Convert(WiiSockAddrIn const & from, sockaddr_in& to) void WiiSockMan::Convert(sockaddr_in const & from, WiiSockAddrIn& to, s32 addrlen) { to.addr.addr = from.sin_addr.s_addr; - to.family = from.sin_family; + to.family = from.sin_family & 0xFF; to.port = from.sin_port; if (addrlen < 0 || addrlen > sizeof(WiiSockAddrIn)) to.len = sizeof(WiiSockAddrIn); diff --git a/Source/Core/Core/Src/IPC_HLE/WII_Socket.h b/Source/Core/Core/Src/IPC_HLE/WII_Socket.h index 38ff45bcc5..3c2ce3bb30 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_Socket.h +++ b/Source/Core/Core/Src/IPC_HLE/WII_Socket.h @@ -212,6 +212,11 @@ public: s32 newSocket(s32 af, s32 type, s32 protocol); s32 delSocket(s32 s); + void clean() + { + WiiSockets.clear(); + } + template void doSock(s32 sock, u32 CommandAddress, T type) {