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

rm::async::Listener 建立的数据报式 Socket 异步会话 更多...

#include <rmvl/io/socket.hpp>

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

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

Public 成员函数

SocketReadAwaiter read ()
 异步读取已连接的 Socket 中的数据
SocketWriteAwaiter write (std::string_view addr, const Endpoint &endpoint, std::string_view data)
 异步写入数据到已连接的 Socket 中
SocketWriteAwaiter write (std::array< uint8_t, 4 > addr, const Endpoint &endpoint, std::string_view data)
 异步写入数据到的 IPv4 的 Socket 中
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 (std::string_view addr, const Endpoint &endpoint, const std::vector< std::string_view > &buffers)
 异步多缓冲区写入
SocketMultiWriteAwaiter multiwrite (std::array< uint8_t, 4 > addr, const Endpoint &endpoint, 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 (std::string_view addr, const Endpoint &endpoint, Args &&...args)
 异步多缓冲区写入
template<typename... Args, typename Enable = std::enable_if_t<(sizeof...(Args) > 0) && (std::is_constructible_v<std::string_view, Args> && ...)>>
SocketMultiWriteAwaiter multiwrite (std::array< uint8_t, 4 > addr, const Endpoint &endpoint, Args &&...args)
Public 成员函数 继承自 rm::DgramSocket
bool invalid () const noexcept
 会话是否失效
SocketFd native_handle () const noexcept
 获取底层 Socket 描述符
template<typename SockOpt>
void setOption (const SockOpt &opt)
 设置 Socket 选项
Endpoint endpoint () const
 获取绑定的端点
RecvData read () noexcept
 同步读取 Socket 中的数据(阻塞)
bool write (std::string_view addr, const Endpoint &endpoint, std::string_view data) noexcept
 同步写入数据到的 Socket 中(阻塞)
bool write (std::array< uint8_t, 4 > addr, const Endpoint &endpoint, std::string_view data) noexcept
 同步写入数据到的 IPv4 的 Socket 中(阻塞)
bool multiwrite (std::string_view addr, const Endpoint &endpoint, const std::vector< std::string_view > &buffers) noexcept
 同步多缓冲区写入
bool multiwrite (std::array< uint8_t, 4 > addr, const Endpoint &endpoint, const std::vector< std::string_view > &buffers) noexcept
 同步多缓冲区写入到 IPv4 的 Socket 中(阻塞)
template<typename... Args, typename Enable = std::enable_if_t<(sizeof...(Args) > 0) && (std::is_constructible_v<std::string_view, Args> && ...)>>
bool multiwrite (std::string_view addr, const Endpoint &endpoint, Args &&...args) noexcept
 同步多缓冲区写入
template<typename... Args, typename Enable = std::enable_if_t<(sizeof...(Args) > 0) && (std::is_constructible_v<std::string_view, Args> && ...)>>
bool multiwrite (std::array< uint8_t, 4 > addr, const Endpoint &endpoint, Args &&...args) noexcept
MultiRecvData multiread (const std::vector< std::size_t > &sizes)
 同步多缓冲区读取
template<typename... Args, typename Enable = std::enable_if_t<(sizeof...(Args) > 0) && (std::is_convertible_v<Args, size_t> && ...)>>
MultiRecvData multiread (Args... sizes)
RecvtoData read_to (char *buf, size_t size) noexcept
 同步读取数据到预分配内存中

额外继承的成员函数

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

详细描述

rm::async::Listener 建立的数据报式 Socket 异步会话

成员函数说明

◆ 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::DgramSocket::multiread ( Args... sizes)
inline

异步多缓冲区读取

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

◆ multiread() [2/2]

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

异步多缓冲区读取

// 使用示例
auto [data_parts, addr, port] = co_await socket.multiread({5, 10, 15});
参数
[in]sizes预期读取的各分片数据大小
返回
读取到的数据分片数组,发送方 IP,发送方端口

◆ multiwrite() [1/4]

template<typename... Args, typename Enable = std::enable_if_t<(sizeof...(Args) > 0) && (std::is_constructible_v<std::string_view, Args> && ...)>>
SocketMultiWriteAwaiter rm::async::DgramSocket::multiwrite ( std::array< uint8_t, 4 > addr,
const Endpoint & endpoint,
Args &&... args )
inline
函数调用图:

◆ multiwrite() [2/4]

SocketMultiWriteAwaiter rm::async::DgramSocket::multiwrite ( std::array< uint8_t, 4 > addr,
const Endpoint & endpoint,
const std::vector< std::string_view > & buffers )
inline
函数调用图:

◆ multiwrite() [3/4]

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

异步多缓冲区写入

// 使用示例
bool success = co_await socket.multiwrite("192.168.1.100", rm::Endpoint(rm::ip::udp::v4(), 12345), "Hello", ", ", "World!");
端点
定义 socket.hpp:276
Protocol v4()
构造端点,以表示 IPv4 UDP 协议
模板参数
Args可变参数包,要求每个参数都能构造为 std::string_view
函数调用图:

◆ multiwrite() [4/4]

SocketMultiWriteAwaiter rm::async::DgramSocket::multiwrite ( std::string_view addr,
const Endpoint & endpoint,
const std::vector< std::string_view > & buffers )
inline

异步多缓冲区写入

// 使用示例
bool success = co_await socket.multiwrite("192.168.1.100", rm::Endpoint(rm::ip::udp::v4(), 12345), {"Hello", ", ", "World!"});
参数
[in]addr目标地址
[in]endpoint目标端点
[in]buffers待写入的多个数据视图
返回
是否写入成功
函数调用图:

◆ read()

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

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

// 使用示例
auto [data, addr, port] = co_await socket.read();
返回
读取到的数据
返回值
data读取的数据
addr发送方地址
port发送方端口
函数调用图:

◆ write() [1/2]

SocketWriteAwaiter rm::async::DgramSocket::write ( std::array< uint8_t, 4 > addr,
const Endpoint & endpoint,
std::string_view data )
inline

异步写入数据到的 IPv4 的 Socket 中

// 使用示例
bool success = co_await socket.write({192, 168, 1, 100}, rm::Endpoint(rm::ip::udp::v4(), 12345), "Hello, World!");
参数
[in]addr使用数组形式表示的 IPv4 目标地址
[in]endpoint目标端点
[in]data待写入的数据
返回
是否写入成功
函数调用图:

◆ write() [2/2]

SocketWriteAwaiter rm::async::DgramSocket::write ( std::string_view addr,
const Endpoint & endpoint,
std::string_view data )
inline

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

// 使用示例
bool success = co_await socket.write("192.168.1.100", rm::Endpoint(rm::ip::udp::v4(), 12345), "Hello, World!");
参数
[in]addr目标地址
[in]endpoint目标端点
[in]data待写入的数据
返回
是否写入成功
函数调用图: