0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2025-03-24 02:10:28 +01:00

ircd::net: Add an internal non-blocking read call; minor comments.

This commit is contained in:
Jason Volk 2018-01-08 03:04:15 -08:00
parent a1f0075d62
commit a9bd77a67d

View file

@ -88,13 +88,14 @@ struct ircd::net::socket
milliseconds cancel_timeout() noexcept;
// low level write suite
template<class iov> size_t write_one(iov&&);
template<class iov> size_t write_any(iov&&);
template<class iov> size_t write_all(iov&&);
template<class iov> size_t write_one(iov&&); // non-blocking
template<class iov> size_t write_any(iov&&); // non-blocking
template<class iov> size_t write_all(iov&&); // yielding
// low level read suite
template<class iov> size_t read_any(iov&&);
template<class iov> size_t read_all(iov&&);
template<class iov> size_t read_one(iov&&); // non-blocking
template<class iov> size_t read_any(iov&&); // yielding
template<class iov> size_t read_all(iov&&); // yielding
// Asynchronous callback when socket ready
void operator()(const wait_type &, const milliseconds &timeout, ec_handler);
@ -179,6 +180,22 @@ ircd::net::socket::read_any(iov&& bufs)
return ret;
}
/// Non-blocking; One system call only; never throws eof;
template<class iov>
size_t
ircd::net::socket::read_one(iov&& bufs)
{
assert(!blocking(*this));
const size_t ret
{
ssl.read_some(std::forward<iov>(bufs))
};
in.bytes += ret;
++in.calls;
return ret;
}
/// Yields ircd::ctx until all buffers are sent.
template<class iov>
size_t