簡體   English   中英

Boost.Asio UDP async_read_from分段錯誤

[英]Boost.Asio UDP async_read_from segmentation fault

我正在構建一個異步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();
}

創建套接字時,我以為會復制io_service對象,但可惜沒有。 由於它是在本地聲明的,因此它會在establishConnection()方法完成后銷毀。 宣布它為全局指針,並且現在運行良好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM