mirror of
https://github.com/RGBCube/serenity
synced 2025-07-28 16:07:45 +00:00
LibCore: Make UDPServer::receive() return ErrorOr<ByteBuffer>
This is a first step towards handling OOM errors instead of just crashing the program. Now UDPServer's method `receive()` return memory allocation errors explicitly with help of ErrorOr. This removes one FIXME and make a bunch of new ones. :(
This commit is contained in:
parent
9ae9d82a03
commit
767529ebf5
6 changed files with 19 additions and 17 deletions
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2022, Alexander Narsudinov <a.narsudinov@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -7,6 +8,7 @@
|
|||
#include <AK/IPv4Address.h>
|
||||
#include <AK/Types.h>
|
||||
#include <LibCore/Notifier.h>
|
||||
#include <LibCore/System.h>
|
||||
#include <LibCore/UDPServer.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
|
@ -61,18 +63,12 @@ bool UDPServer::bind(IPv4Address const& address, u16 port)
|
|||
return true;
|
||||
}
|
||||
|
||||
ByteBuffer UDPServer::receive(size_t size, sockaddr_in& in)
|
||||
ErrorOr<ByteBuffer> UDPServer::receive(size_t size, sockaddr_in& in)
|
||||
{
|
||||
// FIXME: Handle possible OOM situation.
|
||||
auto buf = ByteBuffer::create_uninitialized(size).release_value_but_fixme_should_propagate_errors();
|
||||
auto buf = TRY(ByteBuffer::create_uninitialized(size));
|
||||
socklen_t in_len = sizeof(in);
|
||||
ssize_t rlen = ::recvfrom(m_fd, buf.data(), size, 0, (sockaddr*)&in, &in_len);
|
||||
if (rlen < 0) {
|
||||
dbgln("recvfrom: {}", strerror(errno));
|
||||
return {};
|
||||
}
|
||||
|
||||
buf.resize(rlen);
|
||||
auto bytes_received = TRY(Core::System::recvfrom(m_fd, buf.data(), size, 0, (sockaddr*)&in, &in_len));
|
||||
buf.resize(bytes_received);
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2022, Alexander Narsudinov <a.narsudinov@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -23,8 +24,8 @@ public:
|
|||
bool is_bound() const { return m_bound; }
|
||||
|
||||
bool bind(IPv4Address const& address, u16 port);
|
||||
ByteBuffer receive(size_t size, sockaddr_in& from);
|
||||
ByteBuffer receive(size_t size)
|
||||
ErrorOr<ByteBuffer> receive(size_t size, sockaddr_in& from);
|
||||
ErrorOr<ByteBuffer> receive(size_t size)
|
||||
{
|
||||
struct sockaddr_in saddr;
|
||||
return receive(size, saddr);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue