mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 13:17:35 +00:00
Kernel: Add UDPSocket::try_for_each() for fallible iteration
This API will allow users to short circuit iteration and properly propagate errors.
This commit is contained in:
parent
aabc8d348b
commit
6682afb5d4
2 changed files with 10 additions and 0 deletions
|
@ -22,6 +22,15 @@ void UDPSocket::for_each(Function<void(const UDPSocket&)> callback)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ErrorOr<void> UDPSocket::try_for_each(Function<ErrorOr<void>(const UDPSocket&)> callback)
|
||||||
|
{
|
||||||
|
return sockets_by_port().with_shared([&](const auto& sockets) -> ErrorOr<void> {
|
||||||
|
for (auto& socket : sockets)
|
||||||
|
TRY(callback(*socket.value));
|
||||||
|
return {};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
static Singleton<MutexProtected<HashMap<u16, UDPSocket*>>> s_map;
|
static Singleton<MutexProtected<HashMap<u16, UDPSocket*>>> s_map;
|
||||||
|
|
||||||
MutexProtected<HashMap<u16, UDPSocket*>>& UDPSocket::sockets_by_port()
|
MutexProtected<HashMap<u16, UDPSocket*>>& UDPSocket::sockets_by_port()
|
||||||
|
|
|
@ -19,6 +19,7 @@ public:
|
||||||
|
|
||||||
static RefPtr<UDPSocket> from_port(u16);
|
static RefPtr<UDPSocket> from_port(u16);
|
||||||
static void for_each(Function<void(const UDPSocket&)>);
|
static void for_each(Function<void(const UDPSocket&)>);
|
||||||
|
static ErrorOr<void> try_for_each(Function<ErrorOr<void>(const UDPSocket&)>);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit UDPSocket(int protocol, NonnullOwnPtr<DoubleBuffer> receive_buffer);
|
explicit UDPSocket(int protocol, NonnullOwnPtr<DoubleBuffer> receive_buffer);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue