使用boost :: serialization和boost :: asio时的异常

时间:2013-03-06 15:30:18

标签: exception boost-asio boost-serialization

我的服务器运行以下代码:

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

当服务器启动并运行时,我从另一台机器连接vie telnet。建立连接后,连接立即关闭,服务器崩溃,出现以下异常:

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

上面的代码段失败在哪里?在我手动输入一些XML字符串之前,我认为telnet会话正在发送'\ n'。

1 个答案:

答案 0 :(得分: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

这与Boost.Asio无关,你试图反序列化一个空缓冲区,这是一个无效的XML。要解决此问题,请延迟反序列化,直到从套接字读入缓冲区

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