diff --git a/Kernel/Net/IPv4Socket.cpp b/Kernel/Net/IPv4Socket.cpp index 2b0b90cc39..09b842c295 100644 --- a/Kernel/Net/IPv4Socket.cpp +++ b/Kernel/Net/IPv4Socket.cpp @@ -120,16 +120,6 @@ bool IPv4Socket::can_read(FileDescription& description) const return m_can_read; } -ssize_t IPv4Socket::read(FileDescription& description, u8* buffer, ssize_t size) -{ - return recvfrom(description, buffer, size, 0, nullptr, 0); -} - -ssize_t IPv4Socket::write(FileDescription& description, const u8* data, ssize_t size) -{ - return sendto(description, data, size, 0, nullptr, 0); -} - bool IPv4Socket::can_write(FileDescription&) const { return is_connected(); diff --git a/Kernel/Net/IPv4Socket.h b/Kernel/Net/IPv4Socket.h index 3577cbe7b9..b8458cd3c8 100644 --- a/Kernel/Net/IPv4Socket.h +++ b/Kernel/Net/IPv4Socket.h @@ -28,8 +28,6 @@ public: virtual void attach(FileDescription&) override; virtual void detach(FileDescription&) override; virtual bool can_read(FileDescription&) const override; - virtual ssize_t read(FileDescription&, u8*, ssize_t) override; - virtual ssize_t write(FileDescription&, const u8*, ssize_t) override; virtual bool can_write(FileDescription&) const override; virtual ssize_t sendto(FileDescription&, const void*, size_t, int, const sockaddr*, socklen_t) override; virtual ssize_t recvfrom(FileDescription&, void*, size_t, int flags, sockaddr*, socklen_t*) override; diff --git a/Kernel/Net/LocalSocket.cpp b/Kernel/Net/LocalSocket.cpp index 63cc07ecaf..4eacfe0059 100644 --- a/Kernel/Net/LocalSocket.cpp +++ b/Kernel/Net/LocalSocket.cpp @@ -163,26 +163,6 @@ bool LocalSocket::can_read(FileDescription& description) const ASSERT_NOT_REACHED(); } -ssize_t LocalSocket::read(FileDescription& description, u8* buffer, ssize_t size) -{ - auto role = description.socket_role(); - if (role == SocketRole::Accepted) { - if (!description.is_blocking()) { - if (m_for_server.is_empty()) - return -EAGAIN; - } - return m_for_server.read(buffer, size); - } - if (role == SocketRole::Connected) { - if (!description.is_blocking()) { - if (m_for_client.is_empty()) - return -EAGAIN; - } - return m_for_client.read(buffer, size); - } - ASSERT_NOT_REACHED(); -} - bool LocalSocket::has_attached_peer(const FileDescription& description) const { if (description.socket_role() == SocketRole::Accepted) @@ -192,17 +172,6 @@ bool LocalSocket::has_attached_peer(const FileDescription& description) const ASSERT_NOT_REACHED(); } -ssize_t LocalSocket::write(FileDescription& description, const u8* data, ssize_t size) -{ - if (!has_attached_peer(description)) - return -EPIPE; - if (description.socket_role() == SocketRole::Accepted) - return m_for_client.write(data, size); - if (description.socket_role() == SocketRole::Connected) - return m_for_server.write(data, size); - ASSERT_NOT_REACHED(); -} - bool LocalSocket::can_write(FileDescription& description) const { if (description.socket_role() == SocketRole::Accepted) @@ -214,10 +183,31 @@ bool LocalSocket::can_write(FileDescription& description) const ssize_t LocalSocket::sendto(FileDescription& description, const void* data, size_t data_size, int, const sockaddr*, socklen_t) { - return write(description, (const u8*)data, data_size); + if (!has_attached_peer(description)) + return -EPIPE; + if (description.socket_role() == SocketRole::Accepted) + return m_for_client.write((const u8*)data, data_size); + if (description.socket_role() == SocketRole::Connected) + return m_for_server.write((const u8*)data, data_size); + ASSERT_NOT_REACHED(); } ssize_t LocalSocket::recvfrom(FileDescription& description, void* buffer, size_t buffer_size, int, sockaddr*, socklen_t*) { - return read(description, (u8*)buffer, buffer_size); + auto role = description.socket_role(); + if (role == SocketRole::Accepted) { + if (!description.is_blocking()) { + if (m_for_server.is_empty()) + return -EAGAIN; + } + return m_for_server.read((u8*)buffer, buffer_size); + } + if (role == SocketRole::Connected) { + if (!description.is_blocking()) { + if (m_for_client.is_empty()) + return -EAGAIN; + } + return m_for_client.read((u8*)buffer, buffer_size); + } + ASSERT_NOT_REACHED(); } diff --git a/Kernel/Net/LocalSocket.h b/Kernel/Net/LocalSocket.h index 179f290252..9a65193174 100644 --- a/Kernel/Net/LocalSocket.h +++ b/Kernel/Net/LocalSocket.h @@ -10,6 +10,7 @@ public: static NonnullRefPtr create(int type); virtual ~LocalSocket() override; + // ^Socket virtual KResult bind(const sockaddr*, socklen_t) override; virtual KResult connect(FileDescription&, const sockaddr*, socklen_t, ShouldBlock = ShouldBlock::Yes) override; virtual bool get_local_address(sockaddr*, socklen_t*) override; @@ -17,8 +18,6 @@ public: virtual void attach(FileDescription&) override; virtual void detach(FileDescription&) override; virtual bool can_read(FileDescription&) const override; - virtual ssize_t read(FileDescription&, u8*, ssize_t) override; - virtual ssize_t write(FileDescription&, const u8*, ssize_t) override; virtual bool can_write(FileDescription&) const override; virtual ssize_t sendto(FileDescription&, const void*, size_t, int, const sockaddr*, socklen_t) override; virtual ssize_t recvfrom(FileDescription&, void*, size_t, int flags, sockaddr*, socklen_t*) override; diff --git a/Kernel/Net/Socket.cpp b/Kernel/Net/Socket.cpp index d15bd5d09b..8c57d34e47 100644 --- a/Kernel/Net/Socket.cpp +++ b/Kernel/Net/Socket.cpp @@ -146,3 +146,13 @@ String Socket::absolute_path(const FileDescription& description) const { return String::format("socket:%x (role: %s)", this, to_string(description.socket_role())); } + +ssize_t Socket::read(FileDescription& description, u8* buffer, ssize_t size) +{ + return recvfrom(description, buffer, size, 0, nullptr, 0); +} + +ssize_t Socket::write(FileDescription& description, const u8* data, ssize_t size) +{ + return sendto(description, data, size, 0, nullptr, 0); +} diff --git a/Kernel/Net/Socket.h b/Kernel/Net/Socket.h index 2a6a382027..bbfef8e90b 100644 --- a/Kernel/Net/Socket.h +++ b/Kernel/Net/Socket.h @@ -60,6 +60,9 @@ public: Lock& lock() { return m_lock; } + // ^File + virtual ssize_t read(FileDescription&, u8*, ssize_t) override final; + virtual ssize_t write(FileDescription&, const u8*, ssize_t) override final; virtual String absolute_path(const FileDescription&) const override; protected: