2013-03-06 69 views
1

我的服務器上運行下面的代碼:異常:ASIO

boost::asio::streambuf streambuf; 
std::istream istream(&streambuf); 
boost::archive::xml_iarchive xml_iarchive(istream); 
boost::asio::read_until(socket_, streambuf, '\n'); 

當服務器運行起來我連接從另一臺機器的telnet爭奪。連接建立後,立即連接被越來越關閉,服務器崩潰,以下情況除外:

terminate called after throwing an instance of 'boost::archive::xml_archive_exception' 
    what(): unrecognized XML syntax 

哪裏是在上面的代碼段的失敗?在我手動輸入一些XML字符串之前,我認爲telnet會話正在發送'\ n'。

+0

哪行引發異常? – 2013-03-06 16:17:25

+0

boost :: archive :: xml_iarchive xml_iarchive(istream); – user1587451 2013-03-06 16:51:13

回答

4

你沒有張貼sscce,所以我創建了一個給你

#include <boost/asio.hpp> 
#include <boost/archive/xml_iarchive.hpp> 

int 
main() 
{ 
    try { 
     boost::asio::streambuf streambuf; 
     std::istream istream(&streambuf); 
     boost::archive::xml_iarchive xml_iarchive(istream); 
    } catch (const std::exception& e) { 
     std::cerr << e.what() << std::endl; 
    } 
} 

正如預期的那樣,一個例外是從線10投:

samm$ ./a.out 
unrecognized XML syntax 

這有沒有關係升壓.Asio,你試圖反序列化一個空的緩衝區,這是不合法的XML。爲了解決這個問題,延遲解串直到從socket讀入緩衝區後

boost::asio::read_until(socket_, streambuf, '\n'); 
std::istream istream(&streambuf); 
boost::archive::xml_iarchive xml_iarchive(istream);