mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-12-07 21:59:54 +00:00
LibCore: Accept ReadonlyBytes/Bytes in System::send/recv
Instead of passing in a pointer+size, let's use safer AK types.
This commit is contained in:
parent
e9519b132f
commit
85fd4d5ea1
Notes:
github-actions[bot]
2025-12-01 13:56:47 +00:00
Author: https://github.com/trflynn89
Commit: 85fd4d5ea1
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/6983
6 changed files with 23 additions and 29 deletions
|
|
@ -126,7 +126,7 @@ ErrorOr<Bytes> PosixSocketHelper::read(Bytes buffer, int flags)
|
|||
return Error::from_errno(ENOTCONN);
|
||||
}
|
||||
|
||||
ssize_t nread = TRY(System::recv(m_fd, buffer.data(), buffer.size(), flags));
|
||||
ssize_t nread = TRY(System::recv(m_fd, buffer, flags));
|
||||
if (nread == 0)
|
||||
did_reach_eof_on_read();
|
||||
|
||||
|
|
@ -150,7 +150,7 @@ ErrorOr<size_t> PosixSocketHelper::write(ReadonlyBytes buffer, int flags)
|
|||
return Error::from_errno(ENOTCONN);
|
||||
}
|
||||
|
||||
return TRY(System::send(m_fd, buffer.data(), buffer.size(), flags));
|
||||
return TRY(System::send(m_fd, buffer, flags));
|
||||
}
|
||||
|
||||
void PosixSocketHelper::close()
|
||||
|
|
|
|||
|
|
@ -557,9 +557,9 @@ ErrorOr<void> connect(int sockfd, struct sockaddr const* address, socklen_t addr
|
|||
return {};
|
||||
}
|
||||
|
||||
ErrorOr<ssize_t> send(int sockfd, void const* buffer, size_t buffer_length, int flags)
|
||||
ErrorOr<ssize_t> send(int sockfd, ReadonlyBytes data, int flags)
|
||||
{
|
||||
auto sent = ::send(sockfd, buffer, buffer_length, flags);
|
||||
auto sent = ::send(sockfd, data.data(), data.size(), flags);
|
||||
if (sent < 0)
|
||||
return Error::from_syscall("send"sv, errno);
|
||||
return sent;
|
||||
|
|
@ -573,17 +573,17 @@ ErrorOr<ssize_t> sendmsg(int sockfd, const struct msghdr* message, int flags)
|
|||
return sent;
|
||||
}
|
||||
|
||||
ErrorOr<ssize_t> sendto(int sockfd, void const* source, size_t source_length, int flags, struct sockaddr const* destination, socklen_t destination_length)
|
||||
ErrorOr<ssize_t> sendto(int sockfd, ReadonlyBytes data, int flags, struct sockaddr const* destination, socklen_t destination_length)
|
||||
{
|
||||
auto sent = ::sendto(sockfd, source, source_length, flags, destination, destination_length);
|
||||
auto sent = ::sendto(sockfd, data.data(), data.size(), flags, destination, destination_length);
|
||||
if (sent < 0)
|
||||
return Error::from_syscall("sendto"sv, errno);
|
||||
return sent;
|
||||
}
|
||||
|
||||
ErrorOr<ssize_t> recv(int sockfd, void* buffer, size_t length, int flags)
|
||||
ErrorOr<ssize_t> recv(int sockfd, Bytes buffer, int flags)
|
||||
{
|
||||
auto received = ::recv(sockfd, buffer, length, flags);
|
||||
auto received = ::recv(sockfd, buffer.data(), buffer.size(), flags);
|
||||
if (received < 0)
|
||||
return Error::from_syscall("recv"sv, errno);
|
||||
return received;
|
||||
|
|
@ -597,9 +597,9 @@ ErrorOr<ssize_t> recvmsg(int sockfd, struct msghdr* message, int flags)
|
|||
return received;
|
||||
}
|
||||
|
||||
ErrorOr<ssize_t> recvfrom(int sockfd, void* buffer, size_t buffer_length, int flags, struct sockaddr* address, socklen_t* address_length)
|
||||
ErrorOr<ssize_t> recvfrom(int sockfd, Bytes buffer, int flags, struct sockaddr* address, socklen_t* address_length)
|
||||
{
|
||||
auto received = ::recvfrom(sockfd, buffer, buffer_length, flags, address, address_length);
|
||||
auto received = ::recvfrom(sockfd, buffer.data(), buffer.size(), flags, address, address_length);
|
||||
if (received < 0)
|
||||
return Error::from_syscall("recvfrom"sv, errno);
|
||||
return received;
|
||||
|
|
|
|||
|
|
@ -117,12 +117,12 @@ ErrorOr<void> bind(int sockfd, struct sockaddr const*, socklen_t);
|
|||
ErrorOr<void> listen(int sockfd, int backlog);
|
||||
ErrorOr<int> accept(int sockfd, struct sockaddr*, socklen_t*);
|
||||
ErrorOr<void> connect(int sockfd, struct sockaddr const*, socklen_t);
|
||||
ErrorOr<ssize_t> send(int sockfd, void const*, size_t, int flags);
|
||||
ErrorOr<ssize_t> send(int sockfd, ReadonlyBytes, int flags);
|
||||
ErrorOr<ssize_t> sendmsg(int sockfd, const struct msghdr*, int flags);
|
||||
ErrorOr<ssize_t> sendto(int sockfd, void const*, size_t, int flags, struct sockaddr const*, socklen_t);
|
||||
ErrorOr<ssize_t> recv(int sockfd, void*, size_t, int flags);
|
||||
ErrorOr<ssize_t> sendto(int sockfd, ReadonlyBytes, int flags, struct sockaddr const*, socklen_t);
|
||||
ErrorOr<ssize_t> recv(int sockfd, Bytes, int flags);
|
||||
ErrorOr<ssize_t> recvmsg(int sockfd, struct msghdr*, int flags);
|
||||
ErrorOr<ssize_t> recvfrom(int sockfd, void*, size_t, int flags, struct sockaddr*, socklen_t*);
|
||||
ErrorOr<ssize_t> recvfrom(int sockfd, Bytes, int flags, struct sockaddr*, socklen_t*);
|
||||
ErrorOr<void> getsockopt(int sockfd, int level, int option, void* value, socklen_t* value_size);
|
||||
ErrorOr<void> setsockopt(int sockfd, int level, int option, void const* value, socklen_t value_size);
|
||||
ErrorOr<void> getsockname(int sockfd, struct sockaddr*, socklen_t*);
|
||||
|
|
|
|||
|
|
@ -254,17 +254,17 @@ ErrorOr<int> accept(int sockfd, struct sockaddr* addr, socklen_t* addr_size)
|
|||
return fd;
|
||||
}
|
||||
|
||||
ErrorOr<ssize_t> sendto(int sockfd, void const* source, size_t source_length, int flags, struct sockaddr const* destination, socklen_t destination_length)
|
||||
ErrorOr<ssize_t> sendto(int sockfd, ReadonlyBytes data, int flags, struct sockaddr const* destination, socklen_t destination_length)
|
||||
{
|
||||
auto sent = ::sendto(sockfd, static_cast<char const*>(source), source_length, flags, destination, destination_length);
|
||||
auto sent = ::sendto(sockfd, reinterpret_cast<char const*>(data.data()), static_cast<int>(data.size()), flags, destination, destination_length);
|
||||
if (sent == SOCKET_ERROR)
|
||||
return Error::from_windows_error();
|
||||
return sent;
|
||||
}
|
||||
|
||||
ErrorOr<ssize_t> recvfrom(int sockfd, void* buffer, size_t buffer_length, int flags, struct sockaddr* address, socklen_t* address_length)
|
||||
ErrorOr<ssize_t> recvfrom(int sockfd, Bytes buffer, int flags, struct sockaddr* address, socklen_t* address_length)
|
||||
{
|
||||
auto received = ::recvfrom(sockfd, static_cast<char*>(buffer), buffer_length, flags, address, address_length);
|
||||
auto received = ::recvfrom(sockfd, reinterpret_cast<char*>(buffer.data()), static_cast<int>(buffer.size()), flags, address, address_length);
|
||||
if (received == SOCKET_ERROR)
|
||||
return Error::from_windows_error();
|
||||
return received;
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ ErrorOr<ByteBuffer> UDPServer::receive(size_t size, sockaddr_in& in)
|
|||
{
|
||||
auto buf = TRY(ByteBuffer::create_uninitialized(size));
|
||||
socklen_t in_len = sizeof(in);
|
||||
auto bytes_received = TRY(Core::System::recvfrom(m_fd, buf.data(), size, 0, (sockaddr*)&in, &in_len));
|
||||
auto bytes_received = TRY(Core::System::recvfrom(m_fd, buf, 0, (sockaddr*)&in, &in_len));
|
||||
buf.resize(bytes_received);
|
||||
return buf;
|
||||
}
|
||||
|
|
@ -105,16 +105,10 @@ Optional<u16> UDPServer::local_port() const
|
|||
|
||||
ErrorOr<size_t> UDPServer::send(ReadonlyBytes buffer, sockaddr_in const& to)
|
||||
{
|
||||
if (m_fd < 0) {
|
||||
if (m_fd < 0)
|
||||
return Error::from_errno(EBADF);
|
||||
}
|
||||
|
||||
auto result = ::sendto(m_fd, buffer.data(), buffer.size(), 0, (sockaddr const*)&to, sizeof(to));
|
||||
if (result < 0) {
|
||||
return Error::from_errno(errno);
|
||||
}
|
||||
|
||||
return result;
|
||||
return System::sendto(m_fd, buffer, 0, (sockaddr const*)&to, sizeof(to));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ ErrorOr<ByteBuffer> UDPServer::receive(size_t size, sockaddr_in& in)
|
|||
{
|
||||
auto buf = TRY(ByteBuffer::create_uninitialized(size));
|
||||
socklen_t in_len = sizeof(in);
|
||||
auto bytes_received = TRY(Core::System::recvfrom(m_fd, buf.data(), size, 0, (sockaddr*)&in, &in_len));
|
||||
auto bytes_received = TRY(Core::System::recvfrom(m_fd, buf, 0, (sockaddr*)&in, &in_len));
|
||||
buf.resize(bytes_received);
|
||||
return buf;
|
||||
}
|
||||
|
|
@ -70,7 +70,7 @@ ErrorOr<ByteBuffer> UDPServer::receive(size_t size)
|
|||
ErrorOr<size_t> UDPServer::send(ReadonlyBytes buffer, sockaddr_in const& to)
|
||||
{
|
||||
socklen_t to_len = sizeof(to);
|
||||
return TRY(Core::System::sendto(m_fd, buffer.data(), buffer.size(), 0, (sockaddr const*)&to, to_len));
|
||||
return TRY(Core::System::sendto(m_fd, buffer, 0, (sockaddr const*)&to, to_len));
|
||||
}
|
||||
|
||||
Optional<IPv4Address> UDPServer::local_address() const
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue