2012-01-18 57 views
0

我構建了一個異步UDP套接字並使用boost使用定時器進行管理。第二次嘗試使用socket.async_read_from從套接字讀取數據時,我遇到了分段錯誤。 (使用netbeans和調試器似乎沒有做任何事情......)。我第一次讀得很好。 Netbeans只是拋出一些彙編代碼。我甚至不能做一個斷點的工作。有什麼我失蹤?我檢查了發送到async_read_from的每個對象的地址,並且一切看起來都合法......第一次調用readData()時效果很好,所以我猜測它與io_service有關?Boost.Asio UDP async_read_from分段錯誤

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

當套接字被創建時,我認爲io_service對象將被複制,但唉。由於它是在本地聲明的,因此在establishConnection()方法完成後將被銷燬。宣佈它是一個全局指針,現在它工作得很好。