8#include <initializer_list>
10#include <userver/engine/deadline.hpp>
11#include <userver/engine/io/common.hpp>
12#include <userver/engine/io/exception.hpp>
13#include <userver/engine/io/fd_control_holder.hpp>
14#include <userver/engine/io/sockaddr.hpp>
18USERVER_NAMESPACE_BEGIN
37class [[nodiscard]] Socket
final :
public RwBase {
40 size_t bytes_received{0};
52 explicit Socket(
int fd, AddrDomain domain = AddrDomain::kUnspecified);
66 void Bind(
const Sockaddr&);
69 void Listen(
int backlog = SOMAXCONN);
82 [[nodiscard]] size_t
RecvSome(
void* buf, size_t len, Deadline deadline);
86 [[nodiscard]] size_t
RecvAll(
void* buf, size_t len, Deadline deadline);
94 [[nodiscard]] std::optional<size_t>
RecvNoblock(
void* buf, size_t len);
99 [[nodiscard]] size_t
SendAll(std::initializer_list<IoData> list, Deadline deadline);
101 [[nodiscard]] size_t WriteAll(std::initializer_list<IoData> list, Deadline deadline)
override {
107 [[nodiscard]] size_t
SendAll(
const IoData* list, std::size_t list_size, Deadline deadline);
111 [[nodiscard]] size_t
SendAll(
const struct iovec* list, std::size_t list_size, Deadline deadline);
115 [[nodiscard]] size_t
SendAll(
const void* buf, size_t len, Deadline deadline);
132 [[nodiscard]] size_t
SendAllTo(
const Sockaddr& dest_addr,
const void* buf, size_t len, Deadline deadline);
160 [[nodiscard]] size_t
ReadSome(
void* buf, size_t len, Deadline deadline)
override {
166 [[nodiscard]] size_t
ReadAll(
void* buf, size_t len, Deadline deadline)
override {
180 [[nodiscard]] size_t
WriteAll(
const void* buf, size_t len, Deadline deadline)
override {
185 AddrDomain domain_{AddrDomain::kUnspecified};
187 impl::FdControlHolder fd_control_;