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项目成败的关键因素是码农不是银弹。”
本人说过“哪里都没有银弹”