[英]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.