【发布时间】:2015-12-04 14:05:56
【问题描述】:
我知道的……
我需要根据https://stackoverflow.com/a/25871250在connect()之前调用set_option(tcp::no_delay(true)),否则没有效果。
此外,set_option() 仅在根据https://stackoverflow.com/a/12845502 预先打开套接字时才起作用。
但是,async_connect() 的文档指出,如果在处理连接设置之前已打开传递的套接字,则将关闭传递的套接字(请参阅async_connect())。
这意味着我选择的方法没有正确设置 NO_DELAY(我已经在 Windows 7 x64 上对此进行了测试,所以我可以肯定地说)。
if ( socket.is_open() ) {
socket.close();
}
socket.open(tcp::v4());
socket.set_option(tcp::no_delay(true));
socket.async_connect(endpoint, bind(&MySession::connectComplete, this, asio::placeholders::error));
问题:如何使用 Boost ASIO 正确设置 NO_DELAY 以打开客户端连接?
P.S.:我使用的是 Boost 1.53。切换到另一个 Boost 版本对我来说并不容易。
P.P.S.:不在我的程序中设置 NO_DELAY,而是在注册表中设置网络接口解决了这个问题,但这会影响所有应用程序,这不是我的意图。见description。
【问题讨论】:
-
看到这个了吗? boost.2283326.n4.nabble.com/….
-
使用阻塞套接字不是一个选项,该线程也没有显示解决方案。
标签: c++ boost boost-asio