From dc3bd1e5d455d49d40d2454dcf7244f6ff131119 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Miko=C5=82ajczyk?= Date: Mon, 14 Jul 2025 21:28:11 +0100 Subject: [PATCH] Extract socket write 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 | 9 +++++++++ src/core/libraries/network/sockets.h | 3 +++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/core/libraries/kernel/file_system.cpp b/src/core/libraries/kernel/file_system.cpp index 4a6938b10..bccffbc6c 100644 --- a/src/core/libraries/kernel/file_system.cpp +++ b/src/core/libraries/kernel/file_system.cpp @@ -304,7 +304,7 @@ s64 PS4_SYSV_ABI write(s32 fd, const void* buf, size_t nbytes) { } return result; } else if (file->type == Core::FileSys::FileType::Socket) { - s64 result = ::write(file->socket->Native(), buf, nbytes); + s64 result = file->socket->write(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 796a4c562..42e3ac92c 100644 --- a/src/core/libraries/network/p2p_sockets.cpp +++ b/src/core/libraries/network/p2p_sockets.cpp @@ -62,4 +62,9 @@ int P2PSocket::GetPeerName(OrbisNetSockaddr* addr, u32* namelen) { return 0; } +int P2PSocket::write(const void* buf, size_t len) { + LOG_ERROR(Lib_Net, "(STUBBED) called"); + return 0; +} + } // namespace Libraries::Net \ No newline at end of file diff --git a/src/core/libraries/network/posix_sockets.cpp b/src/core/libraries/network/posix_sockets.cpp index eddf1f2f9..9b83058d5 100644 --- a/src/core/libraries/network/posix_sockets.cpp +++ b/src/core/libraries/network/posix_sockets.cpp @@ -458,4 +458,13 @@ int PosixSocket::GetSocketOptions(int level, int optname, void* optval, u32* opt return 0; } +int PosixSocket::write(const void* buf, size_t len) { +#ifdef _WIN32 + return send(sock, buf, len, 0); +#else + return ::write(sock, buf, len); +#endif +} + + } // namespace Libraries::Net \ No newline at end of file diff --git a/src/core/libraries/network/sockets.h b/src/core/libraries/network/sockets.h index ce54ee765..654fd4955 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 write(const void* buf, size_t len) = 0; virtual bool IsValid() const = 0; virtual net_socket Native() const = 0; std::mutex m_mutex; @@ -82,6 +83,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 write(const void* buf, size_t len) override; bool IsValid() const override { return sock != -1; } @@ -104,6 +106,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 write(const void* buf, size_t len) override; bool IsValid() const override { return true; }