タグ

ブックマーク / faithandbrave.hateblo.jp (3)

  • Boost.Asio 非同期処理のタイムアウトを設定する - Faith and Brave - C++で遊ぼう

    タイムアウトには、async系メソッドと別にdeadline_timerを動かし、タイムアウトを設定します。 タイムアウトの前に非同期処理が完了した場合はdeadline_timer::cancel()を呼び、タイムアウト用のタイマーをキャンセルします。 そうすると、タイムアウトのハンドラが呼ばれなくなる・・・のではなく!タイムアウトのハンドラにエラー(boost::asio::error::operation_aborted)が渡されるので、タイムアウトハンドラがエラーじゃなかった場合に実際のタイムアウト処理を行います。 以下、サンプルコード: #include <boost/asio.hpp> #include <boost/bind.hpp> #include <iostream> namespace asio = boost::asio; class Client { asio::

    Boost.Asio 非同期処理のタイムアウトを設定する - Faith and Brave - C++で遊ぼう
    yysaki
    yysaki 2011/04/19
    タイムアウト処理の設定
  • Boost.Asio に苦戦中 - Faith and Brave - C++で遊ぼう

    boost::asio::ip::tcp::iostream の接続エラー内容って Windows では GetLastError() でしかとれないのかな? 接続エラーかどうかの判断は good() と fail() ? 【Client】 #include <iostream> #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0501 #endif #include <boost/asio.hpp> using namespace std; using namespace boost::asio; using ip::tcp; int main() { io_service io; // 接続(IP, Port) tcp::iostream s("127.0.0.1", "31400"); cout << GetLastError() << end

    Boost.Asio に苦戦中 - Faith and Brave - C++で遊ぼう
    yysaki
    yysaki 2011/04/18
    Boost::asioの接続エラー内容
  • Boost.Asio streambufからstd::stringに変換する - Faith and Brave - C++で遊ぼう

    streambuf::data()で、mutable_bufferまたはconst_bufferがとれるので、それに対してbuffer_castを使用する。 void receive(boost::asio::streambuf& buffer) { const std::string result = boost::asio::buffer_cast<const char*>(buffer.data()); } よくある、streambufをstd::istreamを通じてstd::stringに変換するようなサンプルは、ストリームによって必要なスペースが削られたりと、ストリーム固有の問題で嵌ることがあるので、この方法が素直で簡単です。 サンプル #include <iostream> #include <string> #include <boost/asio.hpp> #includ

    Boost.Asio streambufからstd::stringに変換する - Faith and Brave - C++で遊ぼう
    yysaki
    yysaki 2011/04/18
    mutable_bufferやconst_bufferからstringが取得できる
  • 1