我正在使用Boost ASIO套接字与linux下的某些远程设备进行通信,但是当端点无法访问时我遇到了问题。首先,这是显示此问题的代码部分:
try {
if(mysocket == NULL)
{
mysocket = new boost::asio::ip::tcp::socket(io_service);
}
mysocket->connect(boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string("192.168.0.12"), 1));
printf("connected\n");
return 0;
}
catch (std::exception &e)
{
boost::system::error_code ec;
mysocket->close(ec);
delete mysocket;
mysocket = NULL;
printf("not connected %s\n", e.what());
}
通过在我的类中使用这段代码,我获得了越来越多的eventfd类型的文件描述符,直到使用了所有可用的fds并且应用程序崩溃。上面的代码有什么问题吗?为什么boost不关闭文件描述符?我甚至删除了套接字! 提前谢谢!
答案 0 :(得分:1)
问题是由于没有释放资源,例如boost套接字。这些套接字留下了打开的文件,这些文件逐渐达到我系统中的打开文件限制,因此尝试打开其他文件会导致错误。升压UUID生成器抛出实际异常,无法打开文件!