【发布时间】:2012-10-16 07:02:27
【问题描述】:
我正在使用 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 不关闭文件描述符?我什至删除了套接字! 提前致谢!
【问题讨论】:
-
我尝试在无限循环中运行你的代码,它不会导致任何资源泄漏(boost 1.51、MSVC10、Win7)。能否请您详细说明您的真实情况?
-
我想我解决了这个问题,它不应该与boost有关,而是与其他人的代码没有在基类中使用虚拟析构函数有关!这阻止了一些清理工作,从而留下了一些东西。不确定这是否能解决问题,得先测试一下,但我想我做得很好!
-
你确定你没有泄漏内存吗?为什么不使用
std::shared_ptr而不是裸mysocket指针? -
@SamMiller 感谢您的评论,实际上新套接字不断创建,虚拟析构函数成功了!
-
@cpl 请添加答案,以便其他遇到此问题的人知道解决方案
标签: c++ linux boost boost-asio