Boost.Asio UDP async_read_from分段错误

时间:2012-01-18 21:47:24

标签: sockets udp segmentation-fault boost-asio asyncsocket

我正在构建一个异步UDP套接字并使用boost来定时管理它。我第二次尝试使用socket.async_read_from从套接字读取数据时,我遇到了分段错误。 (使用netbeans和调试器似乎没有做任何事情......)。我第一次阅读效果很好。 Netbeans只会抛出一些汇编代码。我甚至无法做出突破点工作。有什么我想念的吗?我检查了发送到async_read_from的每个对象的地址,一切看起来都合法......第一次调用readData()效果很好,所以我猜它与io_service有关?

bool ServerInstance::openServer()
{
try{
    io_service io_service;
    this->endpoint_= new ip::udp::endpoint(ip::udp::v4(),nPortNumber_);
    this->socket_ = new ip::udp::socket(io_service, *(this->endpoint_));
  //  this->socket_->non_blocking(false);
    this->readData();

}catch(std::exception &e)
{
    this->strErrorMsg_ = e.what();
    return false;
}

return true;

}
char* readData()
{boost::array<char,80> buf;
boost::system::error_code ec = boost::asio::error::would_block;

this->startTimer();

socket_->async_receive_from(buffer(buf),*(this->endpoint_),
        boost::bind(&ServerInstance::handle_read,_1,&ec));

while(ec == boost::asio::error::would_block)
{
    socket_->get_io_service().run_one();
}
this->stopTimer();
socket_->get_io_service().reset();
return buf.data();
}

1 个答案:

答案 0 :(得分:1)

创建套接字时,我认为io_service对象会被复制但是没有。由于它是在本地声明的,因此在establishConnection()方法完成后会被销毁。宣称它是一个全局指针,现在它很好用。