Boost.Asio tcp::iostreamでタイムアウトを設定
Boost 1.47.0から、tcp::iostreamにタイムアウトを設定できるようになります。
タイムアウトの設定には、新たに追加されるexpires_from_now()かexpires_at()を使用し、詳細なエラー内容は、同じくBoost 1.47.0から追加されるerror()メンバ関数によってerror_codeを取得して確認できます。
#include <iostream> #include <boost/asio.hpp> namespace asio = boost::asio; using asio::ip::tcp; int main() { tcp::iostream s; // タイムアウト設定 s.expires_from_now(boost::posix_time::seconds(60)); s.connect("127.0.0.1", "31400"); s << "Hello"; if (!s) { std::cout << "error: " << s.error().message() << std::endl; } else { std::cout << "OK" << std::endl; } }
追記:
このタイムアウトの設定は、「シーケンス全体がN秒以内に完了しなければならない」というもののようです。