diff --git a/Kernel/Net/TCPSocket.cpp b/Kernel/Net/TCPSocket.cpp index 2fe8161a41..1b6de7df24 100644 --- a/Kernel/Net/TCPSocket.cpp +++ b/Kernel/Net/TCPSocket.cpp @@ -29,6 +29,15 @@ void TCPSocket::for_each(Function callback) }); } +ErrorOr TCPSocket::try_for_each(Function(const TCPSocket&)> callback) +{ + return sockets_by_tuple().with_shared([&](const auto& sockets) -> ErrorOr { + for (auto& it : sockets) + TRY(callback(*it.value)); + return {}; + }); +} + bool TCPSocket::unref() const { bool did_hit_zero = sockets_by_tuple().with_exclusive([&](auto& table) { diff --git a/Kernel/Net/TCPSocket.h b/Kernel/Net/TCPSocket.h index 607f0c628e..9c30d1ebd5 100644 --- a/Kernel/Net/TCPSocket.h +++ b/Kernel/Net/TCPSocket.h @@ -19,6 +19,7 @@ namespace Kernel { class TCPSocket final : public IPv4Socket { public: static void for_each(Function); + static ErrorOr try_for_each(Function(const TCPSocket&)>); static ErrorOr> try_create(int protocol, NonnullOwnPtr receive_buffer); virtual ~TCPSocket() override;