1
我正在使用Boost ASIO套接字與Linux下的某些遠程設備進行通信,但是當端點無法訪問時我遇到了問題。首先,這裏是一個說明該問題的代碼部分:Boost ASIO套接字消耗文件描述符
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的文件描述符的越來越多,直到使用所有可用的防衛和安全應用程序崩潰。上面的代碼有問題嗎?爲什麼boost不關閉文件描述符?我甚至刪除了套接字! 在此先感謝!
我試圖在無限循環中運行你的代碼,它不會導致任何資源泄漏(boost 1.51,MSVC10,Win7)。您能否詳細說明您的真實情況? –
我想我解決了這個問題,它不應該與boost相關,但是對於其他人在基類中不使用虛擬析構函數的代碼!這阻止了一些清理工作的執行,從而留下了一些東西。不知道這是否解決了這個問題,首先得先測試一下,但我想我的方式很好! – cpl
你確定你沒有泄漏內存嗎?爲什麼不使用'std :: shared_ptr'而不是裸mysocket'指針? –