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());
}
クラス内でこのコードを使用すると、使用可能なすべての fd が使用されてアプリケーションがクラッシュするまで、eventfd 型のファイル記述子の数が増加します。上記のコードに問題はありますか?ブーストがファイル記述子を閉じないのはなぜですか? ソケットも削除します!前もって感謝します!