From 2b09f81ff89544d30d72335046b56184133bec49 Mon Sep 17 00:00:00 2001 From: ANR2ME Date: Wed, 16 Mar 2022 03:51:46 +0700 Subject: [PATCH] Initialize some socket-related structs to avoid unexpected behavior. (May fix Unknown Source Port issue) --- Core/HLE/proAdhoc.cpp | 8 ++++---- Core/HLE/sceNetAdhoc.cpp | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Core/HLE/proAdhoc.cpp b/Core/HLE/proAdhoc.cpp index 54bc7695e1..05ef72df00 100644 --- a/Core/HLE/proAdhoc.cpp +++ b/Core/HLE/proAdhoc.cpp @@ -1795,7 +1795,7 @@ int getLocalIp(sockaddr_in* SocketAddress) { #if !PPSSPP_PLATFORM(SWITCH) if (metasocket != (int)INVALID_SOCKET) { - struct sockaddr_in localAddr; + struct sockaddr_in localAddr {}; localAddr.sin_addr.s_addr = INADDR_ANY; socklen_t addrLen = sizeof(localAddr); int ret = getsockname((int)metasocket, (struct sockaddr*)&localAddr, &addrLen); @@ -1876,7 +1876,7 @@ int getLocalIp(sockaddr_in* SocketAddress) { } uint32_t getLocalIp(int sock) { - struct sockaddr_in localAddr; + struct sockaddr_in localAddr {}; localAddr.sin_addr.s_addr = INADDR_ANY; socklen_t addrLen = sizeof(localAddr); getsockname(sock, (struct sockaddr*)&localAddr, &addrLen); @@ -1887,7 +1887,7 @@ uint32_t getLocalIp(int sock) { } static std::vector> InitPrivateIPRanges() { - struct sockaddr_in saNet, saMask; + struct sockaddr_in saNet {}, saMask{}; std::vector> ip_ranges; if (1 == inet_pton(AF_INET, "192.168.0.0", &(saNet.sin_addr)) && 1 == inet_pton(AF_INET, "255.255.0.0", &(saMask.sin_addr))) @@ -1934,7 +1934,7 @@ void getLocalMac(SceNetEtherAddr * addr){ } uint16_t getLocalPort(int sock) { - struct sockaddr_in localAddr; + struct sockaddr_in localAddr {}; localAddr.sin_port = 0; socklen_t addrLen = sizeof(localAddr); getsockname(sock, (struct sockaddr*)&localAddr, &addrLen); diff --git a/Core/HLE/sceNetAdhoc.cpp b/Core/HLE/sceNetAdhoc.cpp index 11d6a802c2..989d0e0636 100644 --- a/Core/HLE/sceNetAdhoc.cpp +++ b/Core/HLE/sceNetAdhoc.cpp @@ -600,7 +600,7 @@ int DoBlockingPdpSend(int uid, AdhocSocketRequest& req, s64& result, AdhocSendTa bool retry = false; for (auto peer = targetPeers.peers.begin(); peer != targetPeers.peers.end(); ) { // Fill in Target Structure - struct sockaddr_in target; + struct sockaddr_in target {}; target.sin_family = AF_INET; target.sin_addr.s_addr = peer->ip; target.sin_port = htons(peer->port + ((isOriPort && !isPrivateIP(peer->ip)) ? 0 : portOffset)); @@ -1379,7 +1379,7 @@ static int sceNetAdhocPdpCreate(const char *mac, int port, int bufferSize, u32 f setUDPConnReset(usocket, false); // Binding Information for local Port - struct sockaddr_in addr; + struct sockaddr_in addr {}; addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; if (isLocalServer) { @@ -1577,7 +1577,7 @@ static int sceNetAdhocPdpSend(int id, const char *mac, u32 port, void *data, int // Single Target if (!isBroadcastMAC(daddr)) { // Fill in Target Structure - struct sockaddr_in target; + struct sockaddr_in target {}; target.sin_family = AF_INET; target.sin_port = htons(dport + portOffset); @@ -1687,7 +1687,7 @@ static int sceNetAdhocPdpSend(int id, const char *mac, u32 port, void *data, int // Iterate Peers for (auto peer : dest.peers) { // Fill in Target Structure - struct sockaddr_in target; + struct sockaddr_in target {}; target.sin_family = AF_INET; target.sin_addr.s_addr = peer.ip; target.sin_port = htons(dport + ((isOriPort && !isPrivateIP(peer.ip)) ? 0 : portOffset)); @@ -2164,7 +2164,7 @@ int NetAdhocPdp_Delete(int id, int unknown) { // Valid Socket if (sock != NULL && sock->type == SOCK_PDP) { // Close Connection - struct linger sl; + struct linger sl {}; sl.l_onoff = 1; // non-zero value enables linger option in kernel sl.l_linger = 0; // timeout interval in seconds setsockopt(sock->data.pdp.id, SOL_SOCKET, SO_LINGER, (const char*)&sl, sizeof(sl)); @@ -3307,7 +3307,7 @@ static int sceNetAdhocPtpOpen(const char *srcmac, int sport, const char *dstmac, setSockNoDelay(tcpsocket, 1); // Binding Information for local Port - struct sockaddr_in addr; + struct sockaddr_in addr {}; // addr.sin_len = sizeof(addr); addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; @@ -3776,7 +3776,7 @@ int NetAdhocPtp_Close(int id, int unknown) { // Valid Socket if (socket != NULL && socket->type == SOCK_PTP) { // Close Connection - struct linger sl; + struct linger sl {}; sl.l_onoff = 1; // non-zero value enables linger option in kernel sl.l_linger = 0; // timeout interval in seconds setsockopt(socket->data.ptp.id, SOL_SOCKET, SO_LINGER, (const char*)&sl, sizeof(sl)); @@ -3892,7 +3892,7 @@ static int sceNetAdhocPtpListen(const char *srcmac, int sport, int bufsize, int setSockNoDelay(tcpsocket, 1); // Binding Information for local Port - struct sockaddr_in addr; + struct sockaddr_in addr {}; addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; if (isLocalServer) {