RMVL  2.5.0-dev
Robotic Manipulation and Vision Library
载入中...
搜索中...
未找到
rm::async::StreamSocket类 参考

rm::async::Acceptor 建立的流式 Socket 异步会话 更多...

#include <rmvl/io/socket.hpp>

类 rm::async::StreamSocket 继承关系图:
rm::async::StreamSocket 的协作图:

class  SocketReadAwaiter
 流式 Socket 异步读等待器 更多...
class  SocketWriteAwaiter
 流式 Socket 异步写等待器 更多...
class  SocketMultiReadAwaiter
 流式 Socket 多缓冲区异步读等待器 更多...
class  SocketMultiWriteAwaiter
 流式 Socket 多缓冲区异步写等待器 更多...

Public 成员函数

SocketReadAwaiter read ()
 异步读取已连接的 Socket 中的数据
SocketWriteAwaiter write (std::string_view data)
 异步写入数据到已连接的 Socket 中
IOContextcontext () noexcept
 获取所属异步 I/O 执行上下文
const IOContextcontext () const noexcept
 获取所属异步 I/O 执行上下文
SocketMultiReadAwaiter multiread (const std::vector< size_t > &sizes)
 异步多缓冲区读取
template<typename... Args, typename Enable = std::enable_if_t<(sizeof...(Args) > 0) && (std::is_convertible_v<Args, size_t> && ...)>>
SocketMultiReadAwaiter multiread (Args... sizes)
 异步多缓冲区读取
SocketMultiWriteAwaiter multiwrite (const std::vector< std::string_view > &buffers)
 异步多缓冲区写入
template<typename... Args, typename Enable = std::enable_if_t<(sizeof...(Args) > 0) && (std::is_constructible_v<std::string_view, Args> && ...)>>
SocketMultiWriteAwaiter multiwrite (Args &&...args)
 异步多缓冲区写入
Public 成员函数 继承自 rm::StreamSocket
bool invalid () const noexcept
 会话是否失效
SocketFd native_handle () const noexcept
 获取底层 Socket 描述符
template<typename SockOpt>
void setOption (const SockOpt &opt)
 设置 Socket 选项
Endpoint endpoint () const
 获取绑定的端点
std::string read () noexcept
 同步读取已连接的 Socket 中的数据(阻塞)
bool write (std::string_view data) noexcept
 同步写入数据到已连接的 Socket 中(阻塞)
bool multiwrite (const std::vector< std::string_view > &buffers) noexcept
 同步多缓冲区写入
template<typename... Args, typename Enable = std::enable_if_t<(sizeof...(Args) > 0) && (std::is_constructible_v<std::string_view, Args> && ...)>>
bool multiwrite (Args &&...args) noexcept
 同步多缓冲区写入
std::vector< std::string > multiread (const std::vector< size_t > &sizes)
 同步多缓冲区读取
template<typename... Args, typename Enable = std::enable_if_t<(sizeof...(Args) > 0) && (std::is_convertible_v<Args, size_t> && ...)>>
std::vector< std::string > multiread (Args... sizes)
 同步多缓冲区读取
size_t read_to (char *buf, size_t size) noexcept
 同步读取数据到指定预分配内存中
void close () noexcept
 手动关闭 Socket 会话,一般情况无需调用,除非需要提前释放资源

额外继承的成员函数

Protected 属性 继承自 rm::StreamSocket
SocketFd _fd {INVALID_SOCKET_FD}
 会话文件描述符

详细描述

rm::async::Acceptor 建立的流式 Socket 异步会话

成员函数说明

◆ context() [1/2]

const IOContext & rm::async::StreamSocket::context ( ) const
inlinenodiscardnoexcept

获取所属异步 I/O 执行上下文

◆ context() [2/2]

IOContext & rm::async::StreamSocket::context ( )
inlinenodiscardnoexcept

获取所属异步 I/O 执行上下文

◆ multiread() [1/2]

template<typename... Args, typename Enable = std::enable_if_t<(sizeof...(Args) > 0) && (std::is_convertible_v<Args, size_t> && ...)>>
SocketMultiReadAwaiter rm::async::StreamSocket::multiread ( Args... sizes)
inline

异步多缓冲区读取

// 使用示例
auto data_parts = co_await socket.multiread(5, 10, 15);
模板参数
Args可变参数包,要求每个参数都能转换为 size_t
参数
[in]sizes预期读取的各分片数据大小
函数调用图:

◆ multiread() [2/2]

SocketMultiReadAwaiter rm::async::StreamSocket::multiread ( const std::vector< size_t > & sizes)
inline

异步多缓冲区读取

// 使用示例
auto data_parts = co_await socket.multiread({5, 10, 15});
参数
[in]sizes预期读取的各分片数据大小
返回
读取到的数据分片数组(遇到异常或断开时,返回的 vector 会少于期望分片或包含空串)

◆ multiwrite() [1/2]

template<typename... Args, typename Enable = std::enable_if_t<(sizeof...(Args) > 0) && (std::is_constructible_v<std::string_view, Args> && ...)>>
SocketMultiWriteAwaiter rm::async::StreamSocket::multiwrite ( Args &&... args)
inline

异步多缓冲区写入

// 使用示例
bool success = co_await socket.multiwrite("Hello", ", ", "World!");
模板参数
Args可变参数包,要求每个参数都能构造为 std::string_view
参数
[in]args待写入的多个数据参数包
函数调用图:

◆ multiwrite() [2/2]

SocketMultiWriteAwaiter rm::async::StreamSocket::multiwrite ( const std::vector< std::string_view > & buffers)
inline

异步多缓冲区写入

// 使用示例
bool success = co_await socket.multiwrite({"Hello", ", ", "World!"});
参数
[in]buffers待写入的多个数据视图
返回
是否写入成功

◆ read()

SocketReadAwaiter rm::async::StreamSocket::read ( )
inline

异步读取已连接的 Socket 中的数据

// 使用示例
auto str = co_await socket.read();
定义 str.hpp:19
返回
使用 std::string 存储的读取到的数据

◆ write()

SocketWriteAwaiter rm::async::StreamSocket::write ( std::string_view data)
inline

异步写入数据到已连接的 Socket 中

// 使用示例
bool success = co_await socket.write("Hello, World!");
参数
[in]data待写入的数据
返回
是否写入成功