2018-02-04 03:22:01 +01:00
|
|
|
// Matrix Construct
|
|
|
|
//
|
|
|
|
// Copyright (C) Matrix Construct Developers, Authors & Contributors
|
|
|
|
// Copyright (C) 2016-2018 Jason Volk <jason@zemos.net>
|
|
|
|
//
|
|
|
|
// Permission to use, copy, modify, and/or distribute this software for any
|
|
|
|
// purpose with or without fee is hereby granted, provided that the above
|
|
|
|
// copyright notice and this permission notice is present in all copies. The
|
|
|
|
// full license for this software is available in the LICENSE file.
|
2018-01-07 06:34:02 +01:00
|
|
|
|
|
|
|
#pragma once
|
|
|
|
#define HAVE_IRCD_NET_READ_H
|
|
|
|
|
|
|
|
namespace ircd::net
|
|
|
|
{
|
2020-10-20 02:36:38 +02:00
|
|
|
using mutable_buffers = vector_view<const mutable_buffer>;
|
|
|
|
|
2020-12-24 15:05:36 +01:00
|
|
|
// Observers
|
2023-03-18 21:49:37 +01:00
|
|
|
size_t readable(const socket &); // don't use w/ ssl
|
|
|
|
size_t available(const socket &) noexcept; // don't use w/ ssl
|
|
|
|
size_t pending(const socket &) noexcept; // use with either.
|
2020-12-24 15:05:36 +01:00
|
|
|
|
2018-01-08 21:41:22 +01:00
|
|
|
// Non-blocking; read into buffers in a single syscall
|
2020-10-20 02:36:38 +02:00
|
|
|
size_t read_one(socket &, const mutable_buffers &);
|
2018-01-08 21:41:22 +01:00
|
|
|
size_t read_one(socket &, const mutable_buffer &);
|
|
|
|
|
2018-01-14 10:46:50 +01:00
|
|
|
// Non-blocking; read as much as possible into buffers
|
2020-10-20 02:36:38 +02:00
|
|
|
size_t read_any(socket &, const mutable_buffers &);
|
2018-01-07 06:34:02 +01:00
|
|
|
size_t read_any(socket &, const mutable_buffer &);
|
|
|
|
|
2018-01-14 10:46:50 +01:00
|
|
|
// Yields until something is read into buffers.
|
2020-10-20 02:36:38 +02:00
|
|
|
size_t read_few(socket &, const mutable_buffers &);
|
2018-01-14 10:46:50 +01:00
|
|
|
size_t read_few(socket &, const mutable_buffer &);
|
|
|
|
|
2018-01-07 06:34:02 +01:00
|
|
|
// Yields until buffers are entirely full.
|
2020-10-20 02:36:38 +02:00
|
|
|
size_t read_all(socket &, const mutable_buffers &);
|
2018-01-07 06:34:02 +01:00
|
|
|
size_t read_all(socket &, const mutable_buffer &);
|
|
|
|
|
2018-01-14 10:46:50 +01:00
|
|
|
// Alias to read_few();
|
2020-10-20 02:36:38 +02:00
|
|
|
size_t read(socket &, const mutable_buffers &);
|
2018-01-07 06:34:02 +01:00
|
|
|
size_t read(socket &, const mutable_buffer &);
|
2018-01-12 03:38:29 +01:00
|
|
|
|
2018-01-14 05:17:17 +01:00
|
|
|
// Non-blocking; discard up to len, but less may be discarded.
|
|
|
|
size_t discard_any(socket &, const size_t &len);
|
|
|
|
|
2018-01-12 03:38:29 +01:00
|
|
|
// Yields until len has been discarded
|
|
|
|
size_t discard_all(socket &, const size_t &len);
|
2018-01-07 06:34:02 +01:00
|
|
|
}
|
|
|
|
|
2018-01-14 10:46:50 +01:00
|
|
|
/// Alias to read_few();
|
2018-01-07 06:34:02 +01:00
|
|
|
inline size_t
|
|
|
|
ircd::net::read(socket &socket,
|
|
|
|
const mutable_buffer &buffer)
|
|
|
|
{
|
2018-01-14 10:46:50 +01:00
|
|
|
return read_few(socket, buffer);
|
2018-01-07 06:34:02 +01:00
|
|
|
}
|
|
|
|
|
2018-01-14 10:46:50 +01:00
|
|
|
/// Alias to read_few();
|
2018-01-07 06:34:02 +01:00
|
|
|
inline size_t
|
|
|
|
ircd::net::read(socket &socket,
|
2020-10-20 02:36:38 +02:00
|
|
|
const mutable_buffers &buffers)
|
2018-01-07 06:34:02 +01:00
|
|
|
{
|
2018-01-14 10:46:50 +01:00
|
|
|
return read_few(socket, buffers);
|
2018-01-07 06:34:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
inline size_t
|
|
|
|
ircd::net::read_all(socket &socket,
|
|
|
|
const mutable_buffer &buffer)
|
|
|
|
{
|
|
|
|
const mutable_buffer buffers[]
|
|
|
|
{
|
|
|
|
buffer
|
|
|
|
};
|
|
|
|
|
|
|
|
return read_all(socket, buffers);
|
|
|
|
}
|
|
|
|
|
2018-01-14 10:46:50 +01:00
|
|
|
inline size_t
|
|
|
|
ircd::net::read_few(socket &socket,
|
|
|
|
const mutable_buffer &buffer)
|
|
|
|
{
|
|
|
|
const mutable_buffer buffers[]
|
|
|
|
{
|
|
|
|
buffer
|
|
|
|
};
|
|
|
|
|
|
|
|
return read_few(socket, buffers);
|
|
|
|
}
|
|
|
|
|
2018-01-07 06:34:02 +01:00
|
|
|
inline size_t
|
|
|
|
ircd::net::read_any(socket &socket,
|
|
|
|
const mutable_buffer &buffer)
|
|
|
|
{
|
|
|
|
const mutable_buffer buffers[]
|
|
|
|
{
|
|
|
|
buffer
|
|
|
|
};
|
|
|
|
|
|
|
|
return read_any(socket, buffers);
|
|
|
|
}
|
2018-01-08 21:41:22 +01:00
|
|
|
|
|
|
|
inline size_t
|
|
|
|
ircd::net::read_one(socket &socket,
|
|
|
|
const mutable_buffer &buffer)
|
|
|
|
{
|
|
|
|
const mutable_buffer buffers[]
|
|
|
|
{
|
|
|
|
buffer
|
|
|
|
};
|
|
|
|
|
|
|
|
return read_one(socket, buffers);
|
|
|
|
}
|