char g_cData[1024] = {0};
boost::asio::io_service ioservice;
boost::asio::ip::tcp::endpoint ep(boost::asio::ip::address::from_string("192.168.100.1"),1234);
boost::asio::ip::tcp::socket socket(ioservice);
void handle_read(const boost::system::error_code &ec,size_t byte_read) { }
void handle_write(const boost::system::error_code &ec,size_t byte_read)
{
socket.async_read_some(boost::asio::buffer(g_cData), //Recv
boost::bind(handle_read,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
void main()
{ string cmd = "open";
boost::asio::async_write(socket,boost::asio::buffer(cmd),
boost::bind(handle_write,boost::asio::placeholders::error,boost::asio::placeholders::bytes_transferred)
);
ioservice.run();
}
问题:怎么可以使用定时器dealine_timer设置一个超时时间,让async_read_some()即使没有接收到数据也可以返回呢?
或有没有其他的办法能够使它结束返回?
async_read_some ()只有收到数据或出错才会返回,但假如不出错又收不到数据,那么就会一直卡在这里了。
解决方案
2
5
不需要超时返回啊,超时处理是你本人根据业务逻辑重新写代码。套接字接收函数一直收就是了。
5
达到超时时间后,本人调用socket的cancle()方法取消异步调用(async_write_也会被取消),不过貌似异步设置超时与否没有意义(没有数据就一直让他读吧,反正也不影响你的逻辑,直到读到数据或错误返回)
2
对超时处理问题没有银弹。2
貌似哪里都没有银弹
2
毛主席说:“决定战争胜负的关键因素是人不是武器。”
赵4老师说:“决定IT项目成败的关键因素是码农不是银弹。”
2
对超时处理问题没有银弹。
貌似哪里都没有银弹
毛主席说:“决定战争胜负的关键因素是人不是武器。”
赵4老师说:“决定IT项目成败的关键因素是码农不是银弹。”
本人说过“哪里都没有银弹”
