boost-asio相关内容
客户端执行一些 ssl::stream::async_read_some()/ssl::stream::async_write() 调用和一些点需要退出,即需要关闭连接. 调用 ssl::stream::lowest_layer().close() 有效,但是(正如预期的那样)服务器(一个 openssl s_server -state ... 命令)在关闭连接时报告
..
我很惊讶没有在 boost::asio(我们任何广泛使用的库)中找到时钟组件,所以它尝试制作一个简单、简约的实现来测试我的一些代码. 使用 boost::asio::deadline_timer 我做了以下类 class 时钟{上市:使用 callback_t = std::function;使用 duration_t = boost::posix_time::time_duration;
..
我正在使用 Boost.Asio 在 C++11 中创建服务器应用程序.我创建了一个类,Server,它负责接受新的连接.基本上就是: void Server::Accept() {socket_.reset(new boost::asio::ip::tcp::socket(*io_service_));acceptor_.async_accept(*socket_,boost::bind(&S
..
在我的桌面应用程序中,我使用 boost::asio 添加了对各种互联网资源的访问.我所做的就是发送 http 请求(即映射图块服务器)并读取结果.我的代码基于 asio sync_client 示例. 现在我收到客户的报告,他们在公司中运行代理而无法使用这些功能.在网络浏览器中,他们可以输入他们的代理地址,一切都很好.我们的应用程序无法下载数据. 如何为我的应用程序添加此类支持?
..
我正在创建一个 TCP 服务器,它将使用 boost asio,它将接受来自许多客户端的连接、接收数据并发送确认.问题是我希望能够接受所有客户,但我一次只想与一个客户合作.我希望所有其他事务都保留在队列中. 示例: Client1 连接 Client2 连接 Client1 发送数据并请求回复 Client2 发送数据并请求回复 Client2 的请求被放入队列 Client
..
Linux 和 Windows 都支持 TCP keep-alive 数据包.它们可以通过(依赖于系统的)setsockopt 调用来激活和配置,参见例如这篇文章 适用于 Linux 案例.使用 boost::asio 时,似乎支持保持活动消息,请参阅 当前文档.但是,该页面仅涵盖激活它.在对旧帖子 有人指出 Boost 最近增加了在操作上配置超时的方法(这避免了对不同系统的 setsockopt
..
我的问题 在使用两个线程通过 asio::ip::tcp::iostream 发送和接收时,如何避免数据竞争? 设计 我正在编写一个使用 asio::ip::tcp::iostream 进行输入和输出的程序.该程序通过端口 5555 接受来自(远程)用户的命令,并通过相同的 TCP 连接向用户发送消息.因为这些事件(从用户接收的命令或发送给用户的消息)是异步发生的,所以我有单独的
..
我有一个基于 Boost ASIO 的 C++ 服务器程序,我希望能够将 TCP 使用的源 IP 地址设置为另一台服务器的源 IP 地址.我知道可以读取源 IP 地址和目标 IP 地址,但大概也可以设置它们? 大概如果我在 C++ 代码中设置了“错误"的源 IP 地址,就会与网络堆栈发生一些交互.即使C++代码是对的,网络堆栈不会在出路时重新设置源IP地址吗?正确的方法是编写 C++ ASI
..
我正在尝试使用 boost 实现 tcp 零复制,但我无法在 google 上找到任何东西.我的问题是是否可以使用 boost 库执行零复制,如果是这样,请给我发一些例子或一些链接. 解决方案 您可以观看 Yandex 人员的 BoostCon 演讲:基于Boost.Asio的网络服务器的优化 我的直觉是他们(Yandex 的人)过度设计了这个(相当......).我想说的基本解决方
..
在几年没有接触它之后,我正在尝试使用 boost::asio 制作我自己的简单异步 TCP 服务器. 我能找到的最新示例列表是:http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/tutorial/tutdaytime3/src.html 我在这个示例列表中遇到的问题是(我觉得)它作弊而且作弊很大,通过将 tcp_conne
..
我需要知道如何超时读取(同步或异步无关紧要).我想检查设备是否连接了串口. 为此,我使用 asio::write 然后等待设备的响应. 如果连接了设备 asio::read(serial, boost::asio::buffer(&r,1)) 工作正常,但如果没有设备,程序会停止,这这就是为什么我需要超时 我知道我需要一个 deadline_timer 但我不知道如何在 asyn
..
学习 boost asio 并找出一个名为“strand"的类,据我所知.如果只有一个 io_service 与特定的链相关联并通过链发布句柄. 示例(来自 此处) boost::shared_ptr 然后,strand 会为我们序列化处理程序的执行.但是这样做有什么好处?如果我们希望任务成为连载? 解决方案 想象一个系统,其中单个 io_service 管理数百个网络连接的套接
..
(这是我原来问题的简化版) 我有几个线程可以写入 boost asio 套接字.这似乎工作得很好,没有问题. 文档说共享套接字不是线程安全的( 这里,在底部)所以我想知道我是否应该用互斥锁或其他东西保护套接字. 这个问题 坚持认为保护是必要的,但没有给出如何保护的建议. 我原来的问题的所有答案都坚持认为我在做的事情很危险,并且大多数人都敦促我用 async_writes 甚
..
我正在尝试模拟 boost::asio::write 超时.或者你可以说,我正在尝试使用 boost::asio::async_write 超时. 正如我所见,boost::asio::write 会阻塞,直到所有数据都写入&在另一边阅读.这种功能当然需要超时. 所以,阅读这里的简单答案Robert Hegner 演示了如何使用 timeout 执行 boost::asio::asyn
..
我正在开发基于 boost.asio 的 HTTP 服务器.它应该在外部停止.我们使用 asio 信号处理,它适用于 ctrl-c,但不处理 WM_CLOSE,因此没有直接的方法从外部优雅地关闭应用程序,例如通过 taskkill.强制终止进程不是一种选择.有没有已知的方法来解决这个问题? 解决方案 更新 只需使用您“通常"使用的任何 IPC 方法 编写一个简单的过程控制实用程
..
检查连接远程端的套接字是否关闭的最简单方法是什么?socket::is_open() 即使在远程端关闭也会返回 true(我使用的是 boost::asio::ip::tcp::socket). 我可以尝试从流中读取并查看它是否成功,但是我必须更改程序的逻辑以使其以这种方式工作(我不希望此时从流中提取数据支票). 解决方案 如果连接已被对等端彻底关闭,您应该在阅读时得到一个 EOF.
..
基于 boost::asio 客户端/服务器关系,只有当服务器线程处于“等待连接"状态时,我才必须从服务器程序启动客户端程序. 我的问题是如何知道那个状态? 作为示例,使用 asio 示例/序列化link,并替换掉main函数带有该代码的 server.cpp: #include #include //等待函数#include #include void server_thr
..
我打算使用 boost::asio::async_write_some 从客户端向服务器发送一个结构体,在本例中为 boost::serialization 和 boost::property_tree 来帮忙, //boost::序列化结构体空白{int m_id;std::string m_message;模板void serialize(archive& ar,const 短版){和中;和
..
你能在 boost asio 中设置 SO_RCVTIMEO 和 SO_SNDTIMEO 套接字选项吗? 如果有,怎么办? 注意我知道你可以使用定时器来代替,但我想特别了解这些套接字选项. 解决方案 当然可以!Boost ASIO 允许您访问本机/底层数据,在这种情况下是 SOCKET 本身.所以,假设您有: boost::asio::ip::tcp::socket my_s
..
我是创建一个 所有 SSL 套接字共享的链,还是每个 SSL 上下文(由任何关联的套接字共享)创建一个链? Boost.Asio SSL 文档说明了这一点,但没有提到上下文.我认为这意味着我必须对所有内容只使用一个链,但我认为这是在 OpenSSL 支持多线程之前编写的. SSL 和线程 SSL 流对象不执行自己的锁定.因此,所有异步 SSL 操作都必须在隐式或显式链中执行.请注
..