- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个客户端和服务器异步使用boost::asio
。我想添加一些超时以关闭连接,如果出现问题,则可能重试。
我最初的想法是,每当我调用async_
函数时,在我希望异步操作完成之后,我也应该启动deadline_timer
过期。现在我想知道在每种情况下是否都必须这样做。
例如:
async_resolve
大概使用内置了超时功能的系统解析器(例如RES_TIMEOUT
中的resolv.h
可能会被/etc/resolv.conf
中的配置覆盖)。通过添加自己的计时器,我可能会与用户希望其解析器工作的方式发生冲突。 async_connect
,connect(2)
系统调用内置了某种超时功能async_
调用在“合理的”时间范围内调用其处理程序?并且,如果某个操作[可以|超时]会将该处理程序传递给
basic_errors::timed_out
错误或其他错误?
最佳答案
所以我做了一些测试。根据我的结果,很明显它们取决于底层操作系统的实现。作为引用,我使用一个股票Fedora内核2.6.35.10-74.fc14.x86_64
对此进行了测试。
最重要的是,async_resolve()
似乎是唯一无需设置deadline_timer
就能脱身的情况。实际上,在任何其他情况下,它都需要合理的行为。
async_resolve()
调用async_resolve()
导致间隔5秒的4个查询。请求后20秒调用处理程序,错误为boost::asio::error::host_not_found
。
我的解析器默认为5次超时,尝试2次(resolv.h
),因此它似乎发送的配置查询数量是原来的两倍。通过在options timeout
中设置options attempts
和/etc/resolv.conf
,可以修改此行为。在每种情况下,无论将attempts
设置为多少,发送的查询数量都是其两倍,然后调用该处理程序,但host_not_found
错误。
为了进行测试,对单个配置的名称服务器进行了黑洞路由。
async_connect()
用黑洞路由目标调用async_connect()
会导致在大约189秒后调用该处理程序,并显示错误boost::asio::error::timed_out
。
堆栈发送了初始SYN和5次重试。第一次重试在3秒后发送,每次重试超时都加倍(3 + 6 + 12 + 24 + 48 + 96 = 189)。重试次数可以更改:
% sysctl net.ipv4.tcp_syn_retries
net.ipv4.tcp_syn_retries = 5
[The retransmission timers] for a SYN segment MUST be set large enough to provide retransmission of the segment for at least 3 minutes. The application can close the connection (i.e., give up on the open attempt) sooner, of course.
async_write()
async_write()
。在建立连接的那一刻,但在
async_write()
调用之前,我尝试了各种困惑:
/etc/init.d/network stop
async_write()
都会立即调用其处理程序以报告成功。
boost::asio::error::connection_reset
),我才知道这一点。在其他情况下,该连接将保持打开状态,并且在最终17-18分钟后超时之前不会向我报告错误。
async_write()
的最坏情况是主机正在重新传输并且发送缓冲区已满。如果缓冲区已满,则在重新传输超时之前,
async_write()
不会调用其处理程序。 Linux默认重传15次:
% sysctl net.ipv4.tcp_retries2
net.ipv4.tcp_retries2 = 15
async_write()
处理程序的上限是30分钟。调用时,将error设置为
boost::asio::error::timed_out
。
async_read()
关于c++ - 是否有任何boost::asio异步调用会自动超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4925253/
使用 asio 库,我想为 asio::serial_port 读/写调用使用超时。 是否可以使用相同的 asio::serial_port asio::io_context 和用于 asio 的相同
对于我正在从事的副业项目应该使用哪种类型的解析器,我有点困惑。我在 asio 文档中找不到答案。 我知道 DNS 可以与 UDP 或 TCP 一起使用,并且通常通过 TCP 发送较大的响应。 asio
在仅从一个线程调用 io_service::run() 的情况下,从不同线程调用 async_write 和 async_read 是否安全?谢谢! 最佳答案 Is it safe to call a
我想知道Boost ASIO 有多受欢迎。它是否被用于任何流行的网络密集型软件中? 最佳答案 用于管理 IBM Blue Gene/Q 的系统软件 super 计算机广泛使用Boost.Asio。
我想使用一个函数来读取套接字端口,并在收到 IP 数据包时交还控制权。 boost::asio::ip::udp::socket 有一个函数接收(或 async_receive),它返回读取了多少字节
我试图调整 Boost 文档中的 SSL 服务器示例 here但我想制作一个应用程序,您可以在其中使用普通 boost::asio::ip::tcp::socket或 SSL 套接字,但我还没有找到将
在查看 boost asio co_spawn 文档 ( https://www.boost.org/doc/libs/1_78_0/doc/html/boost_asio/reference/co_
我正在尝试使用 Boost.ASIO 库,但我找不到如何列出 boost 的可用端口(带有串行端口服务)或套接字(带有网络服务)。 你知道这是否可能吗? 谢谢你。 最佳答案 Boost.Asio 不提
我想使用boost::asio从多个stdout中同时读取stderr和boost::process。但是,我在使用boost::asio时遇到了编译问题,可以重建以下无法编译的最小示例: #incl
提前为一个愚蠢的问题道歉 - 我对这一切都很陌生。 所以我从 here 下载了 asio ,并尝试#include asio.hpp,但出现以下错误; fatal error: boost/confi
我是使用 boost 的项目的一部分作为一个 C++ 库。现在我们要使用 SMTP/POP3/SSL/HTTP/HTTPS。我在 Poco::Net 中检测到几个拟合类和函数 Poco::Net::P
有谁知道有任何实现 Web Sockets 的尝试吗?使用 Boost asio 的 API? 最佳答案 我意识到这是一个旧线程,但想更新以帮助那些寻找答案的人:WebSocket++完全符合要求。
和 asio::thread_pool 有什么区别和一个 asio::io_context谁的run()函数是从多个线程调用的?我可以更换我的 boost::thread_group调用 io_con
我想连接到由目标 IP 地址和端口号指定的服务器套接字。 boost::asio::connect 似乎不允许使用它。我有 ip 目的地作为无符号 int 值。 更新:我能够做到 ba::ip::tc
我在 pc 上有 3 个网络接口(interface),并且想确保当我进行 udp 套接字发送时,它通过特定的网络接口(interface)发送(我有发送数据时使用的 ip 地址)。 这是代码。 ud
我正在使用 ASIO 开发网络应用程序并提到了Chat-Server/Client 我问过类似的问题Here 为了更好地解释,我在这里添加了更多代码: 我的 Cserver Class class C
我已经阅读了 boost asio 引用资料,浏览了教程并查看了一些示例。尽管如此,我还是看不出应该如何拆除套接字: 我应该调用 close() 还是由套接字的析构函数完成? 什么时候应该调用 shu
我认为标题已经说明了大部分内容,但我也有兴趣了解在没有现有解决方案的情况下如何将 DTLS 支持引入 asio 最佳答案 ASIO 本身不支持DTLS 但有一个GitHub 库asio_dtls已向
我正在将 async_read 与 streambuf 一起使用。但是,我想将读取的数据量限制为 4,这样我就可以在进入正文之前正确处理 header 。 我如何使用 async_read 做到这一点
从this example开始,我想用 async_read_until() 替换 async_read()。 所以我查了一下this example ,并查看了如何调用 async_read_unt
我是一名优秀的程序员,十分优秀!