1

我正在使用 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 类型的文件描述符,直到所有可用的 fd 都被使用并且应用程序崩溃。上面的代码有问题吗?为什么 boost 不关闭文件描述符?我什至删除了套接字!提前致谢!

4

1 回答 1

1

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

于 2012-10-26T08:55:20.847 回答