SOCK_SEQPACKET Boost::asio 中的支持
SOCK_SEQPACKET support in Boost::asio
是否支持在boost asio中创建带有SOCK_SEQPACKET参数的Unix域套接字?我在官方参考中没有找到任何内容,但也许有解决方法?
你应该
看看boost::asio::seq_packet_socket_service
,
template<typename Protocol>
class seq_packet_socket_service : public io_service::service
在 http://www.boost.org/doc/libs/1_50_0/doc/html/boost_asio/reference/seq_packet_socket_service.html 查看更多信息
答案为我指明了正确的方向。这是一个对我有用的更完整的示例。它是使用独立 asio 和 C++17 std::filesystem
删除旧文件的服务器部分。
#include <asio.hpp>
#include <array>
#include <filesystem>
#include <string>
int main() {
asio::io_context io_context;
std::error_code ec;
std::array<char, 8192> buffer{};
const std::string socket_address{"://tmp/sock.uds"};
std::filesystem::remove(socket_address.substr(2, socket_address.size() - 2), ec);
std::cout << "Removing " << socket_address << "; " << ec.message() << "n";
asio::generic::seq_packet_protocol::endpoint ep{socket_address.c_str(), socket_address.size()};
ep.data()->sa_family = AF_LOCAL;
asio::basic_socket_acceptor<asio::generic::seq_packet_protocol, asio::io_context::executor_type> acceptor(io_context);
acceptor.open(ep.protocol(), ec);
acceptor.bind(ep, ec);
acceptor.listen(1);
auto socket = acceptor.accept(ec);
asio::socket_base::message_flags out_flags;
std::cout << "Connection accepted";
for (;;) {
socket.receive(asio::buffer(buffer, buffer.size()), out_flags);
std::cout << ec.message() << "n";
std::cout << buffer.data() << "n";
}
return 0;
}
好吧,我发现了一个东西,它是在 boost 1.54.0 中添加的。它被称为通用::seq_packet_protocol。当初始化为 seq_packet_protocol(AF_UNIX, 0))
时,它会生成一个对象,该对象可用于打开套接字、创建接受器和端点。因此,SCTP可以以相同的方式实现。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 编译时未启用intel oneApi CUDA支持
- 提升 ASIO 无法识别计时器对象
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 使用CMake检测支持的C++标准
- 为什么istream不支持右值提取
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 扩展光电二极管探测器以支持多个传感器
- MSVC是否支持C++11样式的属性而不是__declspec
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- boost::asio如何生成多个协同程序,然后加入它们
- Boost asio ip tcp iostream 是否支持异步?
- 如何使用boost::asio::serial_port支持硬件流控制
- 如何通过 boost asio 支持 TCP 服务器中的多个连接
- SOCK_SEQPACKET Boost::asio 中的支持
- 确实提升::asio支持websocket
- 如何为boost::asio添加代理支持
- 是否boost::asio支持本地内存连接
- 为什么Boost.Asio不支持基于事件的接口