boost::asio要设置连接超时(是同步连接connect,不是async_connect),除了用deadline_timer::async_wait之外,还有没有其它方法?
我要把连接和超时写在同一个函数里处理,而deadline_timer::async_wait需要另外写一个回调函数,很不爽。
我要把连接和超时写在同一个函数里处理,而deadline_timer::async_wait需要另外写一个回调函数,很不爽。
解决方案 »
- 编译出错,求解..
- Socket多路复用库 https://sourceforge.net/projects/speed/
- 点对点通讯问题
- 我在VC编译时出现 warning C4305: 'initializing' : truncation from 'const int' to 'char'这样的错误,很弱智,还请高手指点,怎么解决
- 请大家推荐一本用vc++进行图像处理和视频处理的两本比较好的书吧?
- 读写USB设备的原码,请指教!!
- 100分求助,请问用什么工具或者方法可以以二进制比特流的形式打开一个文件,然后查看组成该文件的二进制序列,谢谢您!
- 高分提问?大家快来帮忙呀!!!!
- 求助:error LNK2001: 无法解析的外部符号 "protected: virtual struct AFX_EVENTSINKMAP
- 求救,怎么样使用vc实现文件向ftp服务器上传文件??
- 求助:对图像进行变换,matlab中的cp2tform和imtransform函数用c++或OpenCV该如何实现
- vs2010浏览器控件添加后怎么添加成员变量?
它占了线程空间啊
所以你还是得用deadline_timer::async_wait
一个一个来,先把asio搞透了再去学习ACE
嗯,理论上是这样,但是有没有什么变通的方法来模拟“同步”超时。
就像Winsock的connect一样,可以先把socket设为非阻塞,然后connect,再用select来判断超时,asio虽然也可以设为非阻塞,但是找不到一个和select对应的函数。
BOOST异步超时的取消操作又只能是close();
用惯select, 再用asio是有点晕, 但是如果所有流程都是异步, 就没有什么问题了;
deadline_timer _timer;
condition_variable_any _cond;bool ImpHandler::Connect()
{
_pSock = sock_ptr(new tcp::socket(_service)); tcp::endpoint ep(boost::asio::ip::address_v4::loopback(), 6500);
_pSock->async_connect(ep, bind(&ImpHandler::Handle_Connected,
shared_from_this(), placeholders::error, _pSock)); _timer.expires_from_now(posix_time::seconds(5));
_timer.async_wait(bind(&ImpHandler::Handle_Timeout,
shared_from_this())); boost::mutex::scoped_lock lock(_mutex);
_cond.wait(_mutex);
return true;
}void ImpHandler::Handle_Connected(const system::error_code ec, sock_ptr psock)
{
if (!ec)
{
do whatever you want
}
else
_timer.cancel();
}void ImpHandler::Handle_Timeout()
{
_pSock->close();
_cond.notify_one();
}