From 4d6263f368e6b23bdc15261eaa682724d38a9cbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Miko=C5=82ajczyk?= Date: Mon, 14 Jul 2025 21:52:31 +0100 Subject: [PATCH] Extract socket read to a method in Socket --- src/core/libraries/kernel/file_system.cpp | 2 +- src/core/libraries/network/p2p_sockets.cpp | 5 +++++ src/core/libraries/network/posix_sockets.cpp | 8 ++++++++ src/core/libraries/network/sockets.h | 3 +++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/core/libraries/kernel/file_system.cpp b/src/core/libraries/kernel/file_system.cpp index bccffbc6c..87bf71def 100644 --- a/src/core/libraries/kernel/file_system.cpp +++ b/src/core/libraries/kernel/file_system.cpp @@ -492,7 +492,7 @@ s64 PS4_SYSV_ABI read(s32 fd, void* buf, size_t nbytes) { } return result; } else if (file->type == Core::FileSys::FileType::Socket) { - s64 result = ::read(file->socket->Native(), buf, nbytes); + s64 result = file->socket->read(buf, nbytes); if (result < 0) { ErrSceToPosix(result); return -1; diff --git a/src/core/libraries/network/p2p_sockets.cpp b/src/core/libraries/network/p2p_sockets.cpp index 42e3ac92c..dc6eaed57 100644 --- a/src/core/libraries/network/p2p_sockets.cpp +++ b/src/core/libraries/network/p2p_sockets.cpp @@ -62,6 +62,11 @@ int P2PSocket::GetPeerName(OrbisNetSockaddr* addr, u32* namelen) { return 0; } +int P2PSocket::read(void* buf, size_t len) { + LOG_ERROR(Lib_Net, "(STUBBED) called"); + return 0; +} + int P2PSocket::write(const void* buf, size_t len) { LOG_ERROR(Lib_Net, "(STUBBED) called"); return 0; diff --git a/src/core/libraries/network/posix_sockets.cpp b/src/core/libraries/network/posix_sockets.cpp index 9b83058d5..273639396 100644 --- a/src/core/libraries/network/posix_sockets.cpp +++ b/src/core/libraries/network/posix_sockets.cpp @@ -458,6 +458,14 @@ int PosixSocket::GetSocketOptions(int level, int optname, void* optval, u32* opt return 0; } +int PosixSocket::read(void* buf, size_t len) { +#ifdef _WIN32 + return recv(sock, buf, len, 0); +#else + return ::read(sock, buf, len); +#endif +} + int PosixSocket::write(const void* buf, size_t len) { #ifdef _WIN32 return send(sock, buf, len, 0); diff --git a/src/core/libraries/network/sockets.h b/src/core/libraries/network/sockets.h index 654fd4955..0504d6230 100644 --- a/src/core/libraries/network/sockets.h +++ b/src/core/libraries/network/sockets.h @@ -52,6 +52,7 @@ struct Socket { virtual int Connect(const OrbisNetSockaddr* addr, u32 namelen) = 0; virtual int GetSocketAddress(OrbisNetSockaddr* name, u32* namelen) = 0; virtual int GetPeerName(OrbisNetSockaddr* addr, u32* namelen) = 0; + virtual int read(void* buf, size_t len) = 0; virtual int write(const void* buf, size_t len) = 0; virtual bool IsValid() const = 0; virtual net_socket Native() const = 0; @@ -83,6 +84,7 @@ struct PosixSocket : public Socket { int Connect(const OrbisNetSockaddr* addr, u32 namelen) override; int GetSocketAddress(OrbisNetSockaddr* name, u32* namelen) override; int GetPeerName(OrbisNetSockaddr* addr, u32* namelen) override; + int read(void* buf, size_t len) override; int write(const void* buf, size_t len) override; bool IsValid() const override { return sock != -1; @@ -106,6 +108,7 @@ struct P2PSocket : public Socket { int Connect(const OrbisNetSockaddr* addr, u32 namelen) override; int GetSocketAddress(OrbisNetSockaddr* name, u32* namelen) override; int GetPeerName(OrbisNetSockaddr* addr, u32* namelen) override; + int read(void* buf, size_t len) override; int write(const void* buf, size_t len) override; bool IsValid() const override { return true;