Boost ASIO套接字使用文件描述符

时间:2012-10-16 07:02:28

标签: c++ linux boost boost-asio

我正在使用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不关闭文件描述符?我甚至删除了套接字! 提前谢谢!

1 个答案:

答案 0 :(得分:1)

问题是由于没有释放资源,例如boost套接字。这些套接字留下了打开的文件,这些文件逐渐达到我系统中的打开文件限制,因此尝试打开其他文件会导致错误。升压UUID生成器抛出实际异常,无法打开文件!