8using namespace roboctrl::io;
13 info_{std::
move(info)}
15 auto endpoint = asio::ip::tcp::endpoint(
16 asio::ip::make_address(info.
address),
27 info_{.name = std::
move(key), .address = std::
string{}, .port = 0}
29 auto remote = socket_.remote_endpoint();
36 co_await asio::async_write(socket_, asio::buffer(data), asio::use_awaitable);
42 auto bytes =
co_await socket_.async_read_some(asio::buffer(buffer_), asio::use_awaitable);
49 info_{std::
move(info)}
51 auto endpoint = asio::ip::tcp::endpoint(
52 asio::ip::make_address(info_.
address),
57 acceptor_.set_option(asio::ip::tcp::acceptor::reuse_address(
true));
65 asio::ip::tcp::socket
socket{acceptor_.get_executor()};
66 co_await acceptor_.async_accept(
socket, asio::use_awaitable);
74std::shared_ptr<tcp> tcp_server::make_connection(asio::ip::tcp::socket
socket)
77 auto key = std::format(
"{}:{}:{}:{}", info_.
name,
remote.address().to_string(),
remote.port(), connections_.size());
78 return std::make_shared<tcp>(std::move(
socket), std::move(key));
void dispatch(byte_span bytes)
分发收到的字节流。
tcp_server(info_type info)
构造监听器并立即开始监听。
awaitable< void > task()
接受连接的长任务。
tcp(info_type info)
通过连接信息构造客户端。
awaitable< void > send(byte_span data)
发送字节数据。
awaitable< void > task()
接收循环任务。
std::span< std::byte > byte_span
byte span,实际上就是一个std::span<std::byte>;
auto spawn(task_context::task_type &&task)
添加一个协程任务到全局任务上下文中执行。
asio::awaitable< T > awaitable
协程任务类型。
auto executor()
获取全局任务上下文的executor。
std::string address
TCP 连接地址