Code Bye

async_read_some 怎么设置超时返回

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

引用:
Quote: 引用:

对超时处理问题没有银弹。

貌似哪里都没有银弹

毛主席说:“决定战争胜负的关键因素是人不是武器。”
赵4老师说:“决定IT项目成败的关键因素是码农不是银弹。”

2

引用:
Quote: 引用:
Quote: 引用:

对超时处理问题没有银弹。

貌似哪里都没有银弹

毛主席说:“决定战争胜负的关键因素是人不是武器。”
赵4老师说:“决定IT项目成败的关键因素是码农不是银弹。”

本人说过“哪里都没有银弹”


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明async_read_some 怎么设置超时返回