diff --git a/Common/File/DirListing.cpp b/Common/File/DirListing.cpp index d870ea22df..bd027a21ce 100644 --- a/Common/File/DirListing.cpp +++ b/Common/File/DirListing.cpp @@ -12,7 +12,6 @@ #include #include #include -#include #endif #include diff --git a/Common/File/FileDescriptor.cpp b/Common/File/FileDescriptor.cpp index 233f89b6d1..1cc647bc42 100644 --- a/Common/File/FileDescriptor.cpp +++ b/Common/File/FileDescriptor.cpp @@ -3,21 +3,9 @@ #include #include #include -#ifndef _WIN32 -#include -#include -#include -#include -#include -#include -#else -#include -#include -#include -#endif -#include #include "Common/CommonTypes.h" +#include "Common/Net/SocketCompat.h" #include "Common/Data/Encoding/Utf8.h" #include "Common/File/FileDescriptor.h" #include "Common/Log.h" diff --git a/Common/Net/HTTPClient.cpp b/Common/Net/HTTPClient.cpp index 38fdc876bc..c8abcc463f 100644 --- a/Common/Net/HTTPClient.cpp +++ b/Common/Net/HTTPClient.cpp @@ -1,31 +1,14 @@ +#include +#include +#include + #include "Common/Net/HTTPClient.h" #include "Common/TimeUtil.h" #include "Common/StringUtils.h" #include "Common/System/OSD.h" -#ifndef _WIN32 -#include -#include -#include -#include -#include -#include -#include -#define closesocket close -#else -#ifndef NOMINMAX -#define NOMINMAX -#endif -#include -#include -#include -#endif - -#include -#include -#include - +#include "Common/Net/SocketCompat.h" #include "Common/Net/Resolve.h" #include "Common/Net/URL.h" @@ -137,17 +120,10 @@ bool Connection::Connect(int maxTries, double timeout, bool *cancelConnect) { // Start trying to connect (async with timeout.) errno = 0; if (connect(sock, possible->ai_addr, (int)possible->ai_addrlen) < 0) { -#if PPSSPP_PLATFORM(WINDOWS) - int errorCode = WSAGetLastError(); + int errorCode = socket_errno; std::string errorString = GetStringErrorMsg(errorCode); - bool unreachable = errorCode == WSAENETUNREACH; - bool inProgress = errorCode == WSAEINPROGRESS || errorCode == WSAEWOULDBLOCK; -#else - int errorCode = errno; - std::string errorString = strerror(errno); bool unreachable = errorCode == ENETUNREACH; bool inProgress = errorCode == EINPROGRESS || errorCode == EWOULDBLOCK; -#endif if (!inProgress) { char addrStr[128]{}; FormatAddr(addrStr, sizeof(addrStr), possible); diff --git a/Common/Net/NetBuffer.cpp b/Common/Net/NetBuffer.cpp index 751a8c976d..5bf15946e9 100644 --- a/Common/Net/NetBuffer.cpp +++ b/Common/Net/NetBuffer.cpp @@ -1,19 +1,8 @@ #include "ppsspp_config.h" -#ifdef _WIN32 -#include -#undef min -#undef max -#else -#include -#include -#endif + #include #include - -#ifndef MSG_NOSIGNAL -// Default value to 0x00 (do nothing) in systems where it's not supported. -#define MSG_NOSIGNAL 0x00 -#endif +#include "Common/Net/SocketCompat.h" #if _MSC_VER #pragma warning(disable:4267) @@ -98,11 +87,7 @@ bool Buffer::ReadAllWithProgress(int fd, int knownSize, RequestProgress *progres if (retval == 0) { return true; } else if (retval < 0) { -#if PPSSPP_PLATFORM(WINDOWS) - if (WSAGetLastError() != WSAEWOULDBLOCK) { -#else - if (errno != EWOULDBLOCK) { -#endif + if (socket_errno != EWOULDBLOCK) { ERROR_LOG(Log::IO, "Error reading from buffer: %i", retval); return false; } diff --git a/Common/Net/Resolve.cpp b/Common/Net/Resolve.cpp index 6dd93df6a6..9f53823905 100644 --- a/Common/Net/Resolve.cpp +++ b/Common/Net/Resolve.cpp @@ -7,29 +7,10 @@ #include #include - -#ifdef _WIN32 -#include -#include -#ifndef AI_ADDRCONFIG -#define AI_ADDRCONFIG 0x0400 -#endif -#undef min -#undef max -#else -#include -#include -#include -#include -#include -#include -#include -#include -#endif - #include "Common/Log.h" #include "Common/TimeUtil.h" #include "Common/Data/Encoding/Utf8.h" +#include "Common/Net/SocketCompat.h" #ifndef HTTPS_NOT_AVAILABLE #include "ext/naett/naett.h" @@ -157,7 +138,7 @@ bool GetIPList(std::vector &IP4s) { } }*/ } - + freeifaddrs(ifAddrStruct); return true; } @@ -170,13 +151,13 @@ bool GetIPList(std::vector &IP4s) { int sd = socket(AF_INET, SOCK_DGRAM, 0); if (sd < 0) { - ERROR_LOG(Log::sceNet, "GetIPList failed to create socket (result = %i, errno = %i)", sd, errno); + ERROR_LOG(Log::sceNet, "GetIPList failed to create socket (result = %i, errno = %i)", sd, socket_errno); return false; } int r = ioctl(sd, SIOCGIFCONF, (char*)&ifc); if (r != 0) { - ERROR_LOG(Log::sceNet, "GetIPList failed ioctl/SIOCGIFCONF (result = %i, errno = %i)", r, errno); + ERROR_LOG(Log::sceNet, "GetIPList failed ioctl/SIOCGIFCONF (result = %i, errno = %i)", r, socket_errno); return false; } @@ -192,7 +173,7 @@ bool GetIPList(std::vector &IP4s) { r = ioctl(sd, SIOCGIFADDR, item); if (r != 0) { - ERROR_LOG(Log::sceNet, "GetIPList failed ioctl/SIOCGIFADDR (i = %i, result = %i, errno = %i)", i, r, errno); + ERROR_LOG(Log::sceNet, "GetIPList failed ioctl/SIOCGIFADDR (i = %i, result = %i, errno = %i)", i, r, socket_errno); } if (ifreqs[i].ifr_addr.sa_family == AF_INET) { @@ -221,7 +202,7 @@ bool GetIPList(std::vector &IP4s) { // Get local host name char szHostName[256] = ""; if (::gethostname(szHostName, sizeof(szHostName))) { - // Error handling + // Error handling } int status; @@ -322,4 +303,4 @@ int inet_pton(int af, const char* src, void* dst) return 1; } -} +} // namespace net diff --git a/Common/Net/Sinks.cpp b/Common/Net/Sinks.cpp index 4c2a502738..73f2afc0a8 100644 --- a/Common/Net/Sinks.cpp +++ b/Common/Net/Sinks.cpp @@ -1,29 +1,11 @@ #include "ppsspp_config.h" -#if PPSSPP_PLATFORM(WINDOWS) - -#ifndef NOMINMAX -#define NOMINMAX -#endif -#include -#include -#include - -#else - -#include /* socket definitions */ -#include /* socket types */ -#include /* for waitpid() */ -#include /* struct sockaddr_in */ -#include /* inet (3) funtions */ -#include /* misc. UNIX functions */ - -#endif #include #include #include +#include "Common/Net/SocketCompat.h" #include "Common/Net/Sinks.h" #include "Common/Log.h" @@ -192,14 +174,9 @@ bool InputSink::Block() { void InputSink::AccountFill(int bytes) { if (bytes < 0) { -#if PPSSPP_PLATFORM(WINDOWS) - int err = WSAGetLastError(); - if (err == WSAEWOULDBLOCK) + int err = socket_errno; + if (err == EWOULDBLOCK || err == EAGAIN) return; -#else - if (errno == EWOULDBLOCK || errno == EAGAIN) - return; -#endif ERROR_LOG(Log::IO, "Error reading from socket"); return; } @@ -349,7 +326,7 @@ bool OutputSink::Flush(bool allowBlock) { int bytes = send(fd_, buf_ + read_, avail, MSG_NOSIGNAL); #if !PPSSPP_PLATFORM(WINDOWS) - if (bytes == -1 && (errno == EAGAIN || errno == EWOULDBLOCK)) + if (bytes == -1 && (socket_errno == EAGAIN || socket_errno == EWOULDBLOCK)) bytes = 0; #endif AccountDrain(bytes); @@ -381,7 +358,7 @@ void OutputSink::Drain() { int bytes = send(fd_, buf_ + read_, avail, MSG_NOSIGNAL); #if !PPSSPP_PLATFORM(WINDOWS) - if (bytes == -1 && (errno == EAGAIN || errno == EWOULDBLOCK)) + if (bytes == -1 && (socket_errno == EAGAIN || socket_errno == EWOULDBLOCK)) bytes = 0; #endif AccountDrain(bytes); @@ -398,15 +375,10 @@ void OutputSink::AccountPush(size_t bytes) { void OutputSink::AccountDrain(int bytes) { if (bytes < 0) { -#if PPSSPP_PLATFORM(WINDOWS) - int err = WSAGetLastError(); - if (err == WSAEWOULDBLOCK) + int err = socket_errno; + if (err == EWOULDBLOCK || err == EAGAIN) return; -#else - if (errno == EWOULDBLOCK || errno == EAGAIN) - return; -#endif - ERROR_LOG(Log::IO, "Error writing to socket"); + ERROR_LOG(Log::IO, "Error writing to socket: %d", err); return; } diff --git a/Common/Net/SocketCompat.h b/Common/Net/SocketCompat.h index 15b1dcbd72..86113aedbd 100644 --- a/Common/Net/SocketCompat.h +++ b/Common/Net/SocketCompat.h @@ -4,22 +4,40 @@ #if PPSSPP_PLATFORM(WINDOWS) #include "Common/CommonWindows.h" +#include +#include #include #else #include #include +#include #include #include +#include #include -#include +#include #include +#include +#if !PPSSPP_PLATFORM(SWITCH) +#include +#endif +#include +#endif #include #include -#endif + +#if defined(HAVE_LIBNX) || PPSSPP_PLATFORM(SWITCH) +#undef __BSD_VISIBLE +#define __BSD_VISIBLE 1 +#define TCP_MAXSEG 2 +#include +#include +// Missing include, *shrugs* +extern "C" struct hostent *gethostbyname(const char *name); +#endif // defined(HAVE_LIBNX) || PPSSPP_PLATFORM(SWITCH) // TODO: move this to some common set -#ifdef _WIN32 -#undef errno +#if PPSSPP_PLATFORM(WINDOWS) #undef ESHUTDOWN #undef ECONNABORTED #undef ECONNRESET @@ -49,7 +67,7 @@ #undef ENETUNREACH #undef EHOSTUNREACH #undef ENETDOWN -#define errno WSAGetLastError() +#define socket_errno WSAGetLastError() #define ESHUTDOWN WSAESHUTDOWN #define ECONNABORTED WSAECONNABORTED #define ECONNRESET WSAECONNRESET @@ -79,9 +97,10 @@ #define ENETUNREACH WSAENETUNREACH #define EHOSTUNREACH WSAEHOSTUNREACH #define ENETDOWN WSAENETDOWN -inline bool connectInProgress(int errcode) { return (errcode == WSAEWOULDBLOCK || errcode == WSAEINPROGRESS || errcode == WSAEALREADY || errcode == WSAEINVAL); } // WSAEINVAL should be treated as WSAEALREADY during connect for backward-compatibility with Winsock 1.1 +inline bool connectInProgress(int errcode) { return (errcode == WSAEWOULDBLOCK || errcode == WSAEINPROGRESS || errcode == WSAEALREADY || errcode == WSAEINVAL); } // WSAEINVAL should be treated as WSAEALREADY during connect for backward-compatibility with Winsock 1.1 inline bool isDisconnected(int errcode) { return (errcode == WSAECONNRESET || errcode == WSAECONNABORTED || errcode == WSAESHUTDOWN); } #else +#define socket_errno errno #define SOCKET int #define INVALID_SOCKET -1 #define SOCKET_ERROR -1 @@ -114,3 +133,8 @@ inline bool isDisconnected(int errcode) { return (errcode == EPIPE || errcode == #ifndef SD_BOTH #define SD_BOTH SHUT_RDWR //0x02 #endif + +#ifndef MSG_NOSIGNAL +// Default value to 0x00 (do nothing) in systems where it's not supported. +#define MSG_NOSIGNAL 0x00 +#endif diff --git a/Common/Net/WebsocketServer.cpp b/Common/Net/WebsocketServer.cpp index e55c0644f7..ff76377be2 100644 --- a/Common/Net/WebsocketServer.cpp +++ b/Common/Net/WebsocketServer.cpp @@ -2,19 +2,8 @@ #include #include #include -#ifndef _WIN32 -#include -#include -#include -#include -#include -#include -#else -#include -#include -#include -#endif +#include "Common/Net/SocketCompat.h" #include "Common/Data/Encoding/Base64.h" #include "Common/Net/HTTPServer.h" #include "Common/Net/Sinks.h" diff --git a/Core/HLE/NetInetConstants.cpp b/Core/HLE/NetInetConstants.cpp index d4bb411c06..2c382a7bb7 100644 --- a/Core/HLE/NetInetConstants.cpp +++ b/Core/HLE/NetInetConstants.cpp @@ -1,22 +1,8 @@ #include "ppsspp_config.h" -#if PPSSPP_PLATFORM(WINDOWS) -#include "Common/CommonWindows.h" -#include -#endif - -#if __linux__ || __APPLE__ || defined(__OpenBSD__) -#include -#include -#include -#include -#include -#endif - #include -#include "Common/Log.h" -#include "Common/StringUtils.h" #include "Common/Net/SocketCompat.h" +#include "Common/StringUtils.h" #include "Core/HLE/NetInetConstants.h" #include "Core/HLE/sceKernel.h" #include "Core/HLE/HLE.h" diff --git a/Core/HLE/proAdhoc.cpp b/Core/HLE/proAdhoc.cpp index cd42fd392c..01df36d390 100644 --- a/Core/HLE/proAdhoc.cpp +++ b/Core/HLE/proAdhoc.cpp @@ -23,38 +23,12 @@ #include "ppsspp_config.h" -#if defined(_WIN32) -#include -#include "Common/CommonWindows.h" -#endif - -#if !defined(_WIN32) -#include -#include -#include -#include -#include -#if !PPSSPP_PLATFORM(SWITCH) -#include -#endif // !PPSSPP_PLATFORM(SWITCH) -#endif - -#ifndef MSG_NOSIGNAL -// Default value to 0x00 (do nothing) in systems where it's not supported. -#define MSG_NOSIGNAL 0x00 -#endif - -#if defined(HAVE_LIBNX) || PPSSPP_PLATFORM(SWITCH) -#undef __BSD_VISIBLE -#define __BSD_VISIBLE 1 -#include -#define TCP_MAXSEG 2 -#endif // defined(HAVE_LIBNX) || PPSSPP_PLATFORM(SWITCH) - #include #include #include +#include "Common/Net/SocketCompat.h" + #include "Common/Data/Text/I18n.h" #include "Common/Data/Text/Parsers.h" #include "Common/System/OSD.h" @@ -339,7 +313,7 @@ int IsSocketReady(int fd, bool readfd, bool writefd, int* errorcode, int timeout // Note: select will flags an unconnected TCP socket (ie. a freshly created socket without connecting first, or when connect failed with ECONNREFUSED on linux) as writeable/readable, thus can't be used to tell whether the connection has established or not. int ret = select(fd + 1, readfd? &readfds: nullptr, writefd? &writefds: nullptr, nullptr, &tval); if (errorcode != nullptr) - *errorcode = (ret < 0? errno: 0); + *errorcode = (ret < 0 ? socket_errno : 0); return ret; } @@ -1425,7 +1399,7 @@ int friendFinder(){ // Send Ping to Server, may failed with socket error 10054/10053 if someone else with the same IP already connected to AdHoc Server (the server might need to be modified to differentiate MAC instead of IP) if (IsSocketReady((int)metasocket, false, true) > 0) { int iResult = (int)send((int)metasocket, (const char*)&opcode, 1, MSG_NOSIGNAL); - int error = errno; + int error = socket_errno; // KHBBS seems to be getting error 10053 often if (iResult == SOCKET_ERROR) { ERROR_LOG(Log::sceNet, "FriendFinder: Socket Error (%i) when sending OPCODE_PING", error); @@ -2011,7 +1985,7 @@ int getSockError(int sock) { int result = 0; socklen_t result_len = sizeof(result); if (getsockopt(sock, SOL_SOCKET, SO_ERROR, (char*)&result, &result_len) < 0) { - result = errno; + result = socket_errno; } return result; } @@ -2224,7 +2198,7 @@ int initNetwork(SceNetAdhocctlAdhocId *adhoc_id){ int cnt = 0; DEBUG_LOG(Log::sceNet, "InitNetwork: Connecting to AdhocServer"); iResult = connect((int)metasocket, &g_adhocServerIP.addr, sizeof(g_adhocServerIP)); - errorcode = errno; + errorcode = socket_errno; if (iResult == SOCKET_ERROR && errorcode != EISCONN) { u64 startTime = (u64)(time_now_d() * 1000000.0); diff --git a/Core/HLE/proAdhoc.h b/Core/HLE/proAdhoc.h index ebdd8cfc6d..1dfb2fabbf 100644 --- a/Core/HLE/proAdhoc.h +++ b/Core/HLE/proAdhoc.h @@ -17,22 +17,7 @@ #pragma once -// Net stuff -#if defined(_WIN32) -#include "Common/CommonWindows.h" - -#include -#else -#include -#include -#include -#include -#include -#include -#include -#include -#include -#endif +#include "Common/Net/SocketCompat.h" #ifdef _MSC_VER #define PACK // on MSVC we use #pragma pack() instead so let's kill this. @@ -46,7 +31,6 @@ #include #include "Common/Net/Resolve.h" -#include "Common/Net/SocketCompat.h" #include "Common/Serialize/Serializer.h" #include "Core/MemMap.h" #include "Core/HLE/sceKernelThread.h" diff --git a/Core/HLE/proAdhocServer.cpp b/Core/HLE/proAdhocServer.cpp index 0b6c362294..f01e46d27b 100644 --- a/Core/HLE/proAdhocServer.cpp +++ b/Core/HLE/proAdhocServer.cpp @@ -28,33 +28,8 @@ #include #include -#if defined(HAVE_LIBNX) || PPSSPP_PLATFORM(SWITCH) -#include -#include -// Missing include, *shrugs* -extern "C" struct hostent *gethostbyname(const char *name); -#endif // defined(HAVE_LIBNX) || PPSSPP_PLATFORM(SWITCH) - #include -// Net stuff -#if defined(_WIN32) -#include -#include -#else -#include -#include -#include -#endif - -#include -#include -//#include - -#ifndef MSG_NOSIGNAL -// Default value to 0x00 (do nothing) in systems where it's not supported. -#define MSG_NOSIGNAL 0x00 -#endif - +#include "Common/Net/SocketCompat.h" #include "Common/Data/Text/I18n.h" #include "Common/Thread/ThreadUtil.h" #include "Common/System/OSD.h" @@ -860,7 +835,7 @@ void connect_user(SceNetAdhocctlUserNode * user, SceNetAdhocctlGroupName * group // Send Data int iResult = (int)send(peer->stream, (const char*)&packet, sizeof(packet), MSG_NOSIGNAL); - if (iResult < 0) ERROR_LOG(Log::sceNet, "AdhocServer: connect_user[send peer] (Socket error %d)", errno); + if (iResult < 0) ERROR_LOG(Log::sceNet, "AdhocServer: connect_user[send peer] (Socket error %d)", socket_errno); // Set Player Name packet.name = peer->resolver.name; @@ -873,7 +848,7 @@ void connect_user(SceNetAdhocctlUserNode * user, SceNetAdhocctlGroupName * group // Send Data iResult = (int)send(user->stream, (const char*)&packet, sizeof(packet), MSG_NOSIGNAL); - if (iResult < 0) ERROR_LOG(Log::sceNet, "AdhocServer: connect_user[send user] (Socket error %d)", errno); + if (iResult < 0) ERROR_LOG(Log::sceNet, "AdhocServer: connect_user[send user] (Socket error %d)", socket_errno); // Set BSSID if(peer->group_next == NULL) bssid.mac = peer->resolver.mac; @@ -895,7 +870,7 @@ void connect_user(SceNetAdhocctlUserNode * user, SceNetAdhocctlGroupName * group // Send Network BSSID to User int iResult = (int)send(user->stream, (const char*)&bssid, sizeof(bssid), MSG_NOSIGNAL); - if (iResult < 0) ERROR_LOG(Log::sceNet, "AdhocServer: connect_user[send user bssid] (Socket error %d)", errno); + if (iResult < 0) ERROR_LOG(Log::sceNet, "AdhocServer: connect_user[send user bssid] (Socket error %d)", socket_errno); // Notify User char safegamestr[10]; @@ -987,7 +962,7 @@ void disconnect_user(SceNetAdhocctlUserNode * user) // Send Data int iResult = (int)send(peer->stream, (const char*)&packet, sizeof(packet), MSG_NOSIGNAL); - if (iResult < 0) ERROR_LOG(Log::sceNet, "AdhocServer: disconnect_user[send peer] (Socket error %d)", errno); + if (iResult < 0) ERROR_LOG(Log::sceNet, "AdhocServer: disconnect_user[send peer] (Socket error %d)", socket_errno); // Move Pointer peer = peer->group_next; @@ -1086,13 +1061,13 @@ void send_scan_results(SceNetAdhocctlUserNode * user) // Send Group Packet int iResult = (int)send(user->stream, (const char*)&packet, sizeof(packet), MSG_NOSIGNAL); - if (iResult < 0) ERROR_LOG(Log::sceNet, "AdhocServer: send_scan_result[send user] (Socket error %d)", errno); + if (iResult < 0) ERROR_LOG(Log::sceNet, "AdhocServer: send_scan_result[send user] (Socket error %d)", socket_errno); } // Notify Player of End of Scan uint8_t opcode = OPCODE_SCAN_COMPLETE; int iResult = (int)send(user->stream, (const char*)&opcode, 1, MSG_NOSIGNAL); - if (iResult < 0) ERROR_LOG(Log::sceNet, "AdhocServer: send_scan_result[send peer complete] (Socket error %d)", errno); + if (iResult < 0) ERROR_LOG(Log::sceNet, "AdhocServer: send_scan_result[send peer complete] (Socket error %d)", socket_errno); // Notify User char safegamestr[10]; @@ -1151,7 +1126,7 @@ void spread_message(SceNetAdhocctlUserNode *user, const char *message) // Send Data int iResult = (int)send(user->stream, (const char*)&packet, sizeof(packet), MSG_NOSIGNAL); - if (iResult < 0) ERROR_LOG(Log::sceNet, "AdhocServer: spread_message[send user chat] (Socket error %d)", errno); + if (iResult < 0) ERROR_LOG(Log::sceNet, "AdhocServer: spread_message[send user chat] (Socket error %d)", socket_errno); } } @@ -1193,7 +1168,7 @@ void spread_message(SceNetAdhocctlUserNode *user, const char *message) // Send Data int iResult = (int)send(peer->stream, (const char*)&packet, sizeof(packet), MSG_NOSIGNAL); - if (iResult < 0) ERROR_LOG(Log::sceNet, "AdhocServer: spread_message[send peer chat] (Socket error %d)", errno); + if (iResult < 0) ERROR_LOG(Log::sceNet, "AdhocServer: spread_message[send peer chat] (Socket error %d)", socket_errno); // Move Pointer peer = peer->group_next; @@ -1856,18 +1831,18 @@ int create_listen_socket(uint16_t port) // Notify User else { - ERROR_LOG(Log::sceNet, "AdhocServer: Bind returned %i (Socket error %d)", bindresult, errno); + ERROR_LOG(Log::sceNet, "AdhocServer: Bind returned %i (Socket error %d)", bindresult, socket_errno); auto n = GetI18NCategory(I18NCat::NETWORKING); g_OSD.Show(OSDType::MESSAGE_ERROR, std::string(n->T("AdhocServer Failed to Bind Port")) + " " + std::to_string(port)); } // Close Socket closesocket(fd); + } else { + // Notify User + ERROR_LOG(Log::sceNet, "AdhocServer: Socket returned %i (Socket error %d)", fd, socket_errno); } - // Notify User - else ERROR_LOG(Log::sceNet, "AdhocServer: Socket returned %i (Socket error %d)", fd, errno); - // Return Error return -1; } @@ -1942,7 +1917,7 @@ int server_loop(int server) int recvresult = (int)recv(user->stream, (char*)user->rx + user->rxpos, sizeof(user->rx) - user->rxpos, MSG_NOSIGNAL); // Connection Closed or Timed Out - if(recvresult == 0 || (recvresult == -1 && errno != EAGAIN && errno != EWOULDBLOCK) || get_user_state(user) == USER_STATE_TIMED_OUT) + if(recvresult == 0 || (recvresult == -1 && socket_errno != EAGAIN && socket_errno != EWOULDBLOCK) || get_user_state(user) == USER_STATE_TIMED_OUT) { // Logout User logout_user(user); diff --git a/Core/HLE/sceNet.cpp b/Core/HLE/sceNet.cpp index 2b6eb988b2..0c9a817f53 100644 --- a/Core/HLE/sceNet.cpp +++ b/Core/HLE/sceNet.cpp @@ -15,21 +15,11 @@ // Official git repository and contact information can be found at // https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/. -#if __linux__ || __APPLE__ || defined(__OpenBSD__) -#include -#include -#include -#include -#elif _WIN32 -#include -#pragma comment(lib, "ws2_32.lib") -#endif - -#include -#include - -// TODO: fixme move Core/Net to Common/Net +#include +#include +#include #include "Common/Net/Resolve.h" +#include "Common/Net/SocketCompat.h" #include "Core/Net/InetCommon.h" #include "Common/Data/Text/Parsers.h" diff --git a/Core/HLE/sceNetAdhoc.cpp b/Core/HLE/sceNetAdhoc.cpp index 7b6dc2cd1a..23633cb292 100644 --- a/Core/HLE/sceNetAdhoc.cpp +++ b/Core/HLE/sceNetAdhoc.cpp @@ -359,7 +359,7 @@ static void __AdhocctlNotify(u64 userdata, int cyclesLate) { // Don't send anything yet if connection to Adhoc Server is still in progress if (!isAdhocctlNeedLogin && IsSocketReady((int)metasocket, false, true) > 0) { ret = send((int)metasocket, (const char*)&packet, len, MSG_NOSIGNAL); - sockerr = errno; + sockerr = socket_errno; // Successfully Sent or Connection has been closed or Connection failure occurred if (ret >= 0 || (ret == SOCKET_ERROR && sockerr != EAGAIN && sockerr != EWOULDBLOCK)) { // Prevent from sending again @@ -487,7 +487,7 @@ int DoBlockingPdpRecv(AdhocSocketRequest& req, s64& result) { // On Windows: MSG_TRUNC are not supported on recvfrom (socket error WSAEOPNOTSUPP), so we use dummy buffer as an alternative ret = recvfrom(pdpsocket.id, dummyPeekBuf64k, dummyPeekBuf64kSize, MSG_PEEK | MSG_NOSIGNAL, (struct sockaddr*)&sin, &sinlen); - sockerr = errno; + sockerr = socket_errno; // Discard packets from IP that can't be translated into MAC address to prevent confusing the game, since the sender MAC won't be updated and may contains invalid/undefined value. // TODO: In order to discard packets from unresolvable IP (can't be translated into player's MAC) properly, we'll need to manage the socket buffer ourself, @@ -611,7 +611,7 @@ int DoBlockingPdpSend(AdhocSocketRequest& req, s64& result, AdhocSendTargets& ta target.sin_port = htons(peer->port + peer->portOffset); int ret = sendto(pdpsocket.id, (const char*)req.buffer, targetPeers.length, MSG_NOSIGNAL, (struct sockaddr*)&target, sizeof(target)); - int sockerr = errno; + int sockerr = socket_errno; if (ret >= 0) { DEBUG_LOG(Log::sceNet, "sceNetAdhocPdpSend[%i:%u](B): Sent %u bytes to %s:%u\n", req.id, getLocalPort(pdpsocket.id), ret, ip2str(target.sin_addr).c_str(), ntohs(target.sin_port)); @@ -656,7 +656,7 @@ int DoBlockingPtpSend(AdhocSocketRequest& req, s64& result) { // Send Data int ret = send(ptpsocket.id, (const char*)req.buffer, *req.length, MSG_NOSIGNAL); - int sockerr = errno; + int sockerr = socket_errno; // Success if (ret > 0) { @@ -708,7 +708,7 @@ int DoBlockingPtpRecv(AdhocSocketRequest& req, s64& result) { } int ret = recv(ptpsocket.id, (char*)req.buffer, std::max(0, *req.length), MSG_NOSIGNAL); - int sockerr = errno; + int sockerr = socket_errno; // Received Data. POSIX: May received 0 bytes when the remote peer already closed the connection. if (ret > 0) { @@ -773,7 +773,7 @@ int DoBlockingPtpAccept(AdhocSocketRequest& req, s64& result) { if (ret > 0) { // Accept Connection ret = accept(ptpsocket.id, (struct sockaddr*)&sin, &sinlen); - sockerr = errno; + sockerr = socket_errno; } // Accepted New Connection @@ -823,7 +823,7 @@ int DoBlockingPtpConnect(AdhocSocketRequest& req, s64& result, AdhocSendTargets& sin.sin_port = htons(ptpsocket.pport + targetPeer.peers[0].portOffset); ret = connect(ptpsocket.id, (struct sockaddr*)&sin, sizeof(sin)); - sockerr = errno; + sockerr = socket_errno; if (sockerr != 0) DEBUG_LOG(Log::sceNet, "sceNetAdhocPtpConnect[%i:%u]: connect(%i) error = %i", req.id, ptpsocket.lport, ptpsocket.id, sockerr); else @@ -853,7 +853,7 @@ int DoBlockingPtpConnect(AdhocSocketRequest& req, s64& result, AdhocSendTargets& // Note: "getpeername" shouldn't failed if the connection has been established, but on Windows it may succeed even when "connect" is still in-progress and not accepted yet (ie. "Tales of VS" on Windows) ret = getpeername(ptpsocket.id, (struct sockaddr*)&sin, &sinlen); if (ret == SOCKET_ERROR) { - int err = errno; + int err = socket_errno; VERBOSE_LOG(Log::sceNet, "sceNetAdhocPtpConnect[%i:%u]: getpeername(%i) error %i, sockerr = %i", req.id, ptpsocket.lport, ptpsocket.id, err, sockerr); sockerr = err; } @@ -876,7 +876,7 @@ int DoBlockingPtpConnect(AdhocSocketRequest& req, s64& result, AdhocSendTargets& if (/*sockerr == ECONNREFUSED ||*/ static_cast(CoreTiming::GetGlobalTimeUsScaled() - sock->internalLastAttempt) > 16666) { DEBUG_LOG(Log::sceNet, "sceNetAdhocPtpConnect[%i:%u]: Recreating Socket %i, errno = %i, state = %i, attempt = %i", req.id, ptpsocket.lport, ptpsocket.id, sockerr, ptpsocket.state, sock->attemptCount); if (RecreatePtpSocket(req.id) < 0) { - WARN_LOG(Log::sceNet, "sceNetAdhocPtpConnect[%i:%u]: RecreatePtpSocket error %i", req.id, ptpsocket.lport, errno); + WARN_LOG(Log::sceNet, "sceNetAdhocPtpConnect[%i:%u]: RecreatePtpSocket error %i", req.id, ptpsocket.lport, socket_errno); } ptpsocket.state = ADHOC_PTP_STATE_CLOSED; sock->internalLastAttempt = CoreTiming::GetGlobalTimeUsScaled(); @@ -1485,7 +1485,7 @@ int sceNetAdhocPdpCreate(const char *mac, int port, int bufferSize, u32 flag) { // Port not available (exclusively in use?) if (iResult == SOCKET_ERROR) { - ERROR_LOG(Log::sceNet, "Socket error (%i) when binding port %u", errno, ntohs(addr.sin_port)); + ERROR_LOG(Log::sceNet, "Socket error (%i) when binding port %u", socket_errno, ntohs(addr.sin_port)); auto n = GetI18NCategory(I18NCat::NETWORKING); g_OSD.Show(OSDType::MESSAGE_ERROR, std::string(n->T("Failed to Bind Port")) + " " + std::to_string(port + portOffset) + "\n" + std::string(n->T("Please change your Port Offset")), 0.0f, "portbindfail"); @@ -1612,7 +1612,7 @@ int sceNetAdhocPdpSend(int id, const char *mac, u32 port, void *data, int len, i // Send Data. UDP are guaranteed to be sent as a whole or nothing(failed if len > SO_MAX_MSG_SIZE), and never be partially sent/recv int sent = sendto(pdpsocket.id, (const char *)data, len, MSG_NOSIGNAL, (struct sockaddr*)&target, sizeof(target)); - int error = errno; + int error = socket_errno; if (sent == SOCKET_ERROR) { // Simulate blocking behaviour with non-blocking socket @@ -1713,7 +1713,7 @@ int sceNetAdhocPdpSend(int id, const char *mac, u32 port, void *data, int len, i target.sin_port = htons(dport + peer.portOffset); int sent = sendto(pdpsocket.id, (const char*)data, len, MSG_NOSIGNAL, (struct sockaddr*)&target, sizeof(target)); - int error = errno; + int error = socket_errno; if (sent == SOCKET_ERROR) { DEBUG_LOG(Log::sceNet, "Socket Error (%i) on sceNetAdhocPdpSend[%i:%u->%u](BC) [size=%i]", error, id, getLocalPort(pdpsocket.id), ntohs(target.sin_port), len); } @@ -1847,7 +1847,7 @@ int sceNetAdhocPdpRecv(int id, void *addr, void * port, void *buf, void *dataLen sinlen = sizeof(sin); memset(&sin, 0, sinlen); received = recvfrom(pdpsocket.id, dummyPeekBuf64k, dummyPeekBuf64kSize, MSG_PEEK | MSG_NOSIGNAL, (struct sockaddr*)&sin, &sinlen); - error = errno; + error = socket_errno; // Discard packets from IP that can't be translated into MAC address to prevent confusing the game, since the sender MAC won't be updated and may contains invalid/undefined value. // TODO: In order to discard packets from unresolvable IP (can't be translated into player's MAC) properly, we'll need to manage the socket buffer ourself, // by reading the whole available data, separates each datagram and discard unresolvable one, so we can calculate the correct number of available data to recv on GetPdpStat too. @@ -1900,7 +1900,7 @@ int sceNetAdhocPdpRecv(int id, void *addr, void * port, void *buf, void *dataLen memset(&sin, 0, sinlen); // On Windows: Socket Error 10014 may happen when buffer size is less than the minimum allowed/required (ie. negative number on Vulcanus Seek and Destroy), the address is not a valid part of the user address space (ie. on the stack or when buffer overflow occurred), or the address is not properly aligned (ie. multiple of 4 on 32bit and multiple of 8 on 64bit) https://stackoverflow.com/questions/861154/winsock-error-code-10014 received = recvfrom(pdpsocket.id, (char*)buf, std::max(0, *len), MSG_NOSIGNAL, (struct sockaddr*)&sin, &sinlen); - error = errno; + error = socket_errno; // On Windows: recvfrom on UDP can get error WSAECONNRESET when previous sendto's destination is unreachable (or destination port is not bound), may need to disable SIO_UDP_CONNRESET if (received == SOCKET_ERROR && (error == EAGAIN || error == EWOULDBLOCK || error == ECONNRESET)) { @@ -2476,7 +2476,7 @@ u32 NetAdhocctl_Disconnect() { // Send Disconnect Request Packet iResult = send((int)metasocket, (const char*)&opcode, 1, MSG_NOSIGNAL); - error = errno; + error = socket_errno; // Sending may get socket error 10053 if the AdhocServer is already shutted down if (iResult == SOCKET_ERROR) { @@ -3307,7 +3307,7 @@ int RecreatePtpSocket(int ptpId) { // Bound Socket to local Port if (bind(tcpsocket, (struct sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR) { - ERROR_LOG(Log::sceNet, "RecreatePtpSocket(%i) - Socket error (%i) when binding port %u", ptpId, errno, ntohs(addr.sin_port)); + ERROR_LOG(Log::sceNet, "RecreatePtpSocket(%i) - Socket error (%i) when binding port %u", ptpId, socket_errno, ntohs(addr.sin_port)); } else { // Update sport with the port assigned internal->lport = ntohs(local.sin_port) @@ -3325,7 +3325,7 @@ int RecreatePtpSocket(int ptpId) { sock->data.ptp.lport = newlport; } else { - WARN_LOG(Log::sceNet, "RecreatePtpSocket(%i): getsockname error %i", ptpId, errno); + WARN_LOG(Log::sceNet, "RecreatePtpSocket(%i): getsockname error %i", ptpId, socket_errno); } } @@ -3495,7 +3495,7 @@ static int sceNetAdhocPtpOpen(const char *srcmac, int sport, const char *dstmac, } } else { - ERROR_LOG(Log::sceNet, "Socket error (%i) when binding port %u", errno, ntohs(addr.sin_port)); + ERROR_LOG(Log::sceNet, "Socket error (%i) when binding port %u", socket_errno, ntohs(addr.sin_port)); auto n = GetI18NCategory(I18NCat::NETWORKING); g_OSD.Show(OSDType::MESSAGE_ERROR, std::string(n->T("Failed to Bind Port")) + " " + std::to_string(sport + portOffset) + "\n" + std::string(n->T("Please change your Port Offset")), 0.0f, "portbindfail"); @@ -3691,7 +3691,7 @@ static int sceNetAdhocPtpAccept(int id, u32 peerMacAddrPtr, u32 peerPortPtr, int if (newsocket > 0) { // Accept Connection newsocket = accept(ptpsocket.id, (struct sockaddr*)&peeraddr, &peeraddrlen); - error = errno; + error = socket_errno; } if (newsocket == 0 || (newsocket == SOCKET_ERROR && (error == EAGAIN || error == EWOULDBLOCK))) { @@ -3781,7 +3781,7 @@ int NetAdhocPtp_Connect(int id, int timeout, int flag, bool allowForcedConnect) int connectresult = connect(ptpsocket.id, (struct sockaddr*)&sin, sizeof(sin)); // Grab Error Code - int errorcode = errno; + int errorcode = socket_errno; if (connectresult == SOCKET_ERROR) { if (errorcode == EAGAIN || errorcode == EWOULDBLOCK || errorcode == EALREADY || errorcode == EISCONN) @@ -4096,7 +4096,7 @@ static int sceNetAdhocPtpListen(const char *srcmac, int sport, int bufsize, int } if (iResult == SOCKET_ERROR) { - int error = errno; + int error = socket_errno; ERROR_LOG(Log::sceNet, "sceNetAdhocPtpListen[%i]: Socket Error (%i)", sport, error); } @@ -4168,7 +4168,7 @@ static int sceNetAdhocPtpSend(int id, u32 dataAddr, u32 dataSizeAddr, int timeou // Send Data int sent = send(ptpsocket.id, data, *len, MSG_NOSIGNAL); - int error = errno; + int error = socket_errno; // Free Network Lock // _freeNetworkLock(); @@ -4273,7 +4273,7 @@ static int sceNetAdhocPtpRecv(int id, u32 dataAddr, u32 dataSizeAddr, int timeou // Receive Data. POSIX: May received 0 bytes when the remote peer already closed the connection. received = recv(ptpsocket.id, (char*)buf, std::max(0, *len), MSG_NOSIGNAL); - error = errno; + error = socket_errno; if (received == SOCKET_ERROR && (error == EAGAIN || error == EWOULDBLOCK || (ptpsocket.state == ADHOC_PTP_STATE_SYN_SENT && (error == ENOTCONN || connectInProgress(error))))) { if (flag == 0) { @@ -4349,7 +4349,7 @@ int FlushPtpSocket(int socketId) { // Send Empty Data just to trigger Nagle on/off effect to flush the send buffer, Do we need to trigger this at all or is it automatically flushed? //changeBlockingMode(socket->id, nonblock); int ret = send(socketId, nullptr, 0, MSG_NOSIGNAL); - if (ret == SOCKET_ERROR) ret = errno; + if (ret == SOCKET_ERROR) ret = socket_errno; //changeBlockingMode(socket->id, 1); // Restore/Enable Nagle Algo diff --git a/Core/HLE/sceNetInet.cpp b/Core/HLE/sceNetInet.cpp index 3de0c06f16..d567efe253 100644 --- a/Core/HLE/sceNetInet.cpp +++ b/Core/HLE/sceNetInet.cpp @@ -1,4 +1,6 @@ +#include #include "Common/StringUtils.h" +#include "Common/Net/SocketCompat.h" #include "Common/Data/Text/Parsers.h" #include "Common/Serialize/Serializer.h" #include "Common/Serialize/SerializeFuncs.h" @@ -20,11 +22,6 @@ #include "Core/Util/PortManager.h" #include "Core/Instance.h" -#ifndef MSG_NOSIGNAL -// Default value to 0x00 (do nothing) in systems where it's not supported. -#define MSG_NOSIGNAL 0x00 -#endif - int inetLastErrno = 0; // TODO: since errno can only be read once, we should keep track the value to be used on sceNetInetGetErrno int inetLastSocket = -1; // A workaround to keep the most recent socket id for sceNetInetSelect, until we have a socket class wrapper @@ -55,7 +52,7 @@ static int sceNetInetTerm() { static int sceNetInetGetErrno() { if (inetLastErrno == 0) - inetLastErrno = errno; + inetLastErrno = socket_errno; int error = convertInetErrnoHost2PSP(inetLastErrno); inetLastErrno = 0; return hleLogSuccessI(Log::sceNet, error, " at %08x", currentMIPS->pc); @@ -63,7 +60,7 @@ static int sceNetInetGetErrno() { static int sceNetInetGetPspError() { if (inetLastErrno == 0) - inetLastErrno = errno; + inetLastErrno = socket_errno; int error = convertInetErrno2PSPError(convertInetErrnoHost2PSP(inetLastErrno)); inetLastErrno = 0; return hleLogSuccessX(Log::sceNet, error, " at %08x", currentMIPS->pc); @@ -136,7 +133,7 @@ static int sceNetInetGetpeername(int sock, u32 namePtr, u32 namelenPtr) { DEBUG_LOG(Log::sceNet, "Getpeername: Family = %s, Address = %s, Port = %d", inetSocketDomain2str(saddr.addr.sa_family).c_str(), ip2str(saddr.in.sin_addr).c_str(), ntohs(saddr.in.sin_port)); *namelen = len; if (retval < 0) { - inetLastErrno = errno; + inetLastErrno = socket_errno; return hleLogError(Log::sceNet, retval, "errno = %d", inetLastErrno); } else { memcpy(name->sa_data, saddr.addr.sa_data, len - (sizeof(name->sa_len) + sizeof(name->sa_family))); @@ -163,7 +160,7 @@ static int sceNetInetGetsockname(int sock, u32 namePtr, u32 namelenPtr) { DEBUG_LOG(Log::sceNet, "Getsockname: Family = %s, Address = %s, Port = %d", inetSocketDomain2str(saddr.addr.sa_family).c_str(), ip2str(saddr.in.sin_addr).c_str(), ntohs(saddr.in.sin_port)); *namelen = len; if (retval < 0) { - inetLastErrno = errno; + inetLastErrno = socket_errno; return hleLogError(Log::sceNet, retval, "errno = %d", inetLastErrno); } else { memcpy(name->sa_data, saddr.addr.sa_data, len - (sizeof(name->sa_len) + sizeof(name->sa_family))); @@ -259,7 +256,7 @@ int sceNetInetSelect(int nfds, u32 readfdsPtr, u32 writefdsPtr, u32 exceptfdsPtr } if (retval < 0) { - inetLastErrno = errno; + inetLastErrno = socket_errno; if (inetLastErrno == 0) hleLogDebug(Log::sceNet, retval, "errno = %d", inetLastErrno); else if (inetLastErrno < 0) @@ -326,7 +323,7 @@ static int sceNetInetRecv(int socket, u32 bufPtr, u32 bufLen, u32 flags) { flgs = convertMSGFlagsPSP2Host(flgs); int retval = recv(socket, (char*)Memory::GetPointer(bufPtr), bufLen, flgs | MSG_NOSIGNAL); if (retval < 0) { - inetLastErrno = errno; + inetLastErrno = socket_errno; if (inetLastErrno == EAGAIN) hleLogDebug(Log::sceNet, retval, "errno = %d", inetLastErrno); else @@ -353,7 +350,7 @@ static int sceNetInetSend(int socket, u32 bufPtr, u32 bufLen, u32 flags) { int retval = send(socket, (char*)Memory::GetPointer(bufPtr), bufLen, flgs | MSG_NOSIGNAL); if (retval < 0) { - inetLastErrno = errno; + inetLastErrno = socket_errno; if (inetLastErrno == EAGAIN) hleLogDebug(Log::sceNet, retval, "errno = %d", inetLastErrno); else @@ -369,7 +366,7 @@ static int sceNetInetSocket(int domain, int type, int protocol) { DEBUG_LOG(Log::sceNet, "Socket: Domain = %s, Type = %s, Protocol = %s", inetSocketDomain2str(domain).c_str(), inetSocketType2str(type).c_str(), inetSocketProto2str(protocol).c_str()); int retval = socket(convertSocketDomainPSP2Host(domain), convertSocketTypePSP2Host(type), convertSocketProtoPSP2Host(protocol)); if (retval < 0) { - inetLastErrno = errno; + inetLastErrno = socket_errno; return hleLogError(Log::sceNet, retval, "errno = %d", inetLastErrno); } @@ -439,7 +436,7 @@ static int sceNetInetSetsockopt(int socket, int level, int optname, u32 optvalPt retval = setsockopt(socket, convertSockoptLevelPSP2Host(level), convertSockoptNamePSP2Host(optname, level), (char*)optval, optlen); } if (retval < 0) { - inetLastErrno = errno; + inetLastErrno = socket_errno; hleLogError(Log::sceNet, retval, "errno = %d", inetLastErrno); } return hleLogSuccessI(Log::sceNet, retval); @@ -498,7 +495,7 @@ static int sceNetInetGetsockopt(int socket, int level, int optname, u32 optvalPt retval = getsockopt(socket, convertSockoptLevelPSP2Host(level), convertSockoptNamePSP2Host(optname, level), (char*)optval, optlen); } if (retval < 0) { - inetLastErrno = errno; + inetLastErrno = socket_errno; hleLogError(Log::sceNet, retval, "errno = %d", inetLastErrno); } DEBUG_LOG(Log::sceNet, "SockOpt: OptValue = %d", *optval); @@ -532,7 +529,7 @@ static int sceNetInetBind(int socket, u32 namePtr, int namelen) { changeBlockingMode(socket, 0); int retval = bind(socket, (struct sockaddr*)&saddr, len); if (retval < 0) { - inetLastErrno = errno; + inetLastErrno = socket_errno; changeBlockingMode(socket, 1); return hleLogError(Log::sceNet, retval, "errno = %d", inetLastErrno); } @@ -571,7 +568,7 @@ static int sceNetInetConnect(int socket, u32 sockAddrPtr, int sockAddrLen) { changeBlockingMode(socket, 0); // Use blocking mode as temporary fix for UNO, since we don't simulate blocking-mode yet int retval = connect(socket, (struct sockaddr*)&saddr.addr, dstlen); if (retval < 0) { - inetLastErrno = errno; + inetLastErrno = socket_errno; if (connectInProgress(inetLastErrno)) hleLogDebug(Log::sceNet, retval, "errno = %d", inetLastErrno); else @@ -593,7 +590,7 @@ static int sceNetInetListen(int socket, int backlog) { int retval = listen(socket, (backlog == PSP_NET_INET_SOMAXCONN ? SOMAXCONN : backlog)); if (retval < 0) { - inetLastErrno = errno; + inetLastErrno = socket_errno; return hleLogError(Log::sceNet, retval, "errno = %d", inetLastErrno); } @@ -609,7 +606,7 @@ static int sceNetInetAccept(int socket, u32 addrPtr, u32 addrLenPtr) { *srclen = std::min((*srclen) > 0 ? *srclen : 0, static_cast(sizeof(saddr))); int retval = accept(socket, (struct sockaddr*)&saddr.addr, srclen); if (retval < 0) { - inetLastErrno = errno; + inetLastErrno = socket_errno; if (inetLastErrno == EAGAIN) hleLogDebug(Log::sceNet, retval, "errno = %d", inetLastErrno); else @@ -671,7 +668,7 @@ static int sceNetInetRecvfrom(int socket, u32 bufferPtr, int len, int flags, u32 flgs = convertMSGFlagsPSP2Host(flgs); int retval = recvfrom(socket, (char*)Memory::GetPointer(bufferPtr), len, flgs | MSG_NOSIGNAL, (struct sockaddr*)&saddr.addr, srclen); if (retval < 0) { - inetLastErrno = errno; + inetLastErrno = socket_errno; if (inetLastErrno == EAGAIN) hleLogDebug(Log::sceNet, retval, "errno = %d", inetLastErrno); else @@ -734,7 +731,7 @@ static int sceNetInetSendto(int socket, u32 bufferPtr, int len, int flags, u32 t saddr.in.sin_addr.s_addr = peer->ip_addr; retval = sendto(socket, (char*)Memory::GetPointer(bufferPtr), len, flgs | MSG_NOSIGNAL, (struct sockaddr*)&saddr.addr, dstlen); if (retval < 0) { - DEBUG_LOG(Log::sceNet, "SendTo(BC): Socket error %d", errno); + DEBUG_LOG(Log::sceNet, "SendTo(BC): Socket error %d", socket_errno); } else { DEBUG_LOG(Log::sceNet, "SendTo(BC): Address = %s, Port = %d", ip2str(saddr.in.sin_addr).c_str(), ntohs(saddr.in.sin_port)); } @@ -761,7 +758,7 @@ static int sceNetInetSendto(int socket, u32 bufferPtr, int len, int flags, u32 t retval = sendto(socket, (char*)Memory::GetPointer(bufferPtr), len, flgs | MSG_NOSIGNAL, (struct sockaddr*)&saddr.addr, dstlen); } if (retval < 0) { - inetLastErrno = errno; + inetLastErrno = socket_errno; if (inetLastErrno == EAGAIN) hleLogDebug(Log::sceNet, retval, "errno = %d", inetLastErrno); else @@ -907,7 +904,7 @@ static int sceNetInetSendmsg(int socket, u32 msghdrPtr, int flags) { if (retval != SOCKET_ERROR) { DEBUG_LOG(Log::sceNet, "SendMsg(BC): Address = %s, Port = %d", ip2str(saddr.in.sin_addr).c_str(), ntohs(saddr.in.sin_port)); } else { - DEBUG_LOG(Log::sceNet, "SendMsg(BC): Socket error %d", errno); + DEBUG_LOG(Log::sceNet, "SendMsg(BC): Socket error %d", socket_errno); } } // Free Peer Lock @@ -956,7 +953,7 @@ static int sceNetInetSendmsg(int socket, u32 msghdrPtr, int flags) { free(buf); */ if (retval < 0) { - inetLastErrno = errno; + inetLastErrno = socket_errno; if (inetLastErrno == EAGAIN) hleLogDebug(Log::sceNet, retval, "errno = %d", inetLastErrno); else diff --git a/Core/HLE/sceNetInet.h b/Core/HLE/sceNetInet.h index f6fd25f299..fb84e14350 100644 --- a/Core/HLE/sceNetInet.h +++ b/Core/HLE/sceNetInet.h @@ -7,8 +7,6 @@ #include "Common/Net/SocketCompat.h" #include -#include -#include // Using constants instead of numbers for readability reason, since PSP_THREAD_ATTR_KERNEL/USER is located in sceKernelThread.cpp instead of sceKernelThread.h #ifndef PSP_THREAD_ATTR_KERNEL diff --git a/Core/Net/InetCommon.cpp b/Core/Net/InetCommon.cpp index 29909fd04e..3b8729b7ad 100644 --- a/Core/Net/InetCommon.cpp +++ b/Core/Net/InetCommon.cpp @@ -1,27 +1,13 @@ // TODO: license -#if __linux__ || __APPLE__ || defined(__OpenBSD__) -#include -#include -#include -#include -#endif - // TODO: fixme move Core/Net to Common/Net #include "Common/Net/Resolve.h" +#include "Common/Net/SocketCompat.h" #include "Core/Net/InetCommon.h" -#include "Common/Data/Text/Parsers.h" - -#include "Common/Serialize/Serializer.h" #include "Core/Config.h" #include "Core/HLE/HLE.h" #include "Core/MemMapHelpers.h" -#include "Core/HLE/proAdhoc.h" - -#include -#include - #include "Core/HLE/sceNp.h" #if PPSSPP_PLATFORM(WINDOWS) @@ -31,7 +17,7 @@ bool getDefaultOutboundSockaddr(sockaddr_in& destSockaddrIn, socklen_t& destSocklen) { auto fd = socket(AF_INET, SOCK_STREAM, 0); if (fd < 0) { - ERROR_LOG(Log::sceNet, "getSockAddrFromDefaultSocket: Failed to open socket (%s)", strerror(errno)); + ERROR_LOG(Log::sceNet, "getSockAddrFromDefaultSocket: Failed to open socket (%s)", strerror(socket_errno)); return false; } sockaddr_in connectingTo; @@ -40,12 +26,12 @@ bool getDefaultOutboundSockaddr(sockaddr_in& destSockaddrIn, socklen_t& destSock connectingTo.sin_port = htons(53); connectingTo.sin_addr.s_addr = 0x08080808; if (connect(fd, (sockaddr*) &connectingTo, sizeof(connectingTo)) < 0) { - ERROR_LOG(Log::sceNet, "getSockAddrFromDefaultSocket: Failed to connect to Google (%s)", strerror(errno)); + ERROR_LOG(Log::sceNet, "getSockAddrFromDefaultSocket: Failed to connect to Google (%s)", strerror(socket_errno)); close(fd); return false; } if (getsockname(fd, (sockaddr*) &destSockaddrIn, &destSocklen) < 0) { - ERROR_LOG(Log::sceNet, "getSockAddrFromDefaultSocket: Failed to execute getsockname (%s)", strerror(errno)); + ERROR_LOG(Log::sceNet, "getSockAddrFromDefaultSocket: Failed to execute getsockname (%s)", strerror(socket_errno)); close(fd); return false; }