boost::asio异步TCP客户端async_read_some回调函数返回Operation canceled错误

Blue_Clothes 2016-07-07 08:37:16
初学boost::asio,服务端是异步的,客户端也是异步的(分别在两台主机),但是async_read_some的回调函数返回Operation canceled错误。把代码改成同步的测试,可以正常read到数据。服务端和客户端在一台主机时,可以read,但是偶现Operation canceled错误。
部分代码:
void start(){
sock_ptr sock(new ip::tcp::socket(ios));
sock->async_connect(ep, bind(&client::conn_handler, this, placeholders::error, sock));
}

void conn_handler(const boost::system::error_code& ec, sock_ptr sock){
if(ec) return;
cout << "receive from " << sock->remote_endpoint().address() << endl;
boost::shared_ptr<vector<char> > str(new vector<char>(100, 0));

sock->async_read_some(buffer(*str), bind(&client::read_handler, this, placeholders::error, str));

//sync timer block to control the client connection frequency
deadline_timer t(ios, boost::posix_time::seconds(5));
t.wait();
start(); //retry to connect in the next time
}

void read_handler(const boost::system::error_code& ec, boost::shared_ptr<vector<char> > str){
if(ec)
{
cout << "error:";
throw boost::system::system_error(ec);
return;
}
cout << &(*str)[0] << endl;
}
谁知道是什么原因啊
...全文
2620 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
小菜寻路 2018-01-15
  • 打赏
  • 举报
回复
async_connect传递给回调函数conn_handler的参数sock在async_read_some注册了回调函数之后,就过期了,连接被关闭,之后触发了该连接的所有异步回调函数,得到错误码 125,对应的描述是Operation canceled

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧