提升 ASIO 套接字使用文件描述符

Boost ASIO socket consumes file descriptors

本文关键字:文件 描述 ASIO 套接字 提升      更新时间:2023-10-16

我正在使用 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("connectedn");
   return 0;
}
catch (std::exception &e)
{
   boost::system::error_code ec;
   mysocket->close(ec);
   delete mysocket;
   mysocket = NULL;
   printf("not connected %sn", e.what());
}

通过在我的类中使用这段代码,我得到了越来越多的 eventfd 类型的文件描述符,直到所有可用的 fds 都被使用并且应用程序崩溃。上面的代码有问题吗?为什么 boost 不关闭文件描述符?我什至删除了插座!提前感谢!

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