読者です 読者をやめる 読者になる 読者になる

Boost.Asio tcp::iostreamでタイムアウトを設定

C++

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秒以内に完了しなければならない」というもののようです。