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で非同期通信を書いていると、送受信のためのバッファをメンバ変数に持つ必要が出てきて、局所化が難しい場合があります。 この解決策として、以下のようなイディオムを使うことで送受信バッファをローカル変数化することができます: 送受信バッファをshared_ptrで包む async_read, async_writeにshared_ptrを間接参照したバッファを渡す このままでは送受信関数のスコープを抜けた時点でshared_ptrが消えてしまう 送受信のハンドラにshared_ptrのバッファをbindする io_serviceは内部でハンドラ関数のキューをメンバ変数として管理してるので、bindされたshared_ptrのバッファはハンドラの呼び出しが終了するまで寿命が尽きない つまり、メンバ変数の管理を、部分適用されたハンドラとio_serviceで隠してしまうのです。
Boost Advent Calndar 2011に恐縮ですが参加させて頂きました。15日目です。 最初はBoost.Asioについてまとめるぞーと意気込んでいたものの変に長くなってしまったのでBoost.Asioの中のio_serviceに絞ったためこんなタイトルに成り申した。 Boost.Asioとは 主にネットワークのI/Oのような時間のかかってしまう処理を非同期的かつ簡潔に扱えるようにした便利なライブラリです。 ネットワークを中心に、シリアルポート、タイマー、シグナルのハンドリングなども扱えます。 と、いうわけでio_serviceです。 Windows環境にてVC++10、Boost1.48.0を用いています。 io_service 全てはこのクラスに始まり、このクラスに終わります。 各OSの提供するI/O制御への橋渡しをしてくれるもので、Asioの提供するIOサービス(dead
JavaScript (not to be confused with Java) is a flexibleContinue readingJavaScript case Go (often also Golang) is a compiled, multithreaded programming language developed internally by Google. The Go language was designed to create highly efficient programs that run on modern distributed systems and multi-core processors. Go is a strongly statically typed language. Has a fairly concise and simple s
Perlでコマンドラインオプションをparseしようと思うと組込みモジュールとしては Getopt::Std と Getopt::Long がある。が、long style option *1 つまり --option-name のようなオプションを解釈してくれるのは Getopt::Long だけだ。なので普通はこちらを使おう。 ただし 絶対にデフォルト、つまり以下のようにして使ってはいけない。 use Getopt::Long; my (@primary, @secondary, $silent); GetOptions( "server-primary|p=s" => \@primary, "server-secondary|s=s" => \@secondary, "silent|S" => \$silent ); これダメ! 絶対ダメ! 死ぬ! 最初に結論を書く 必ず以下のように
2012年も残すところあと20日ほどとなりましたが皆様いかがお過ごしでしょうか。@fujiwara です。 このエントリは tech.kayac.com Advent Calendar 2012 10日目の記事です。 テーマが「私の中のマイイノベーション 2012」ということで、まずこの1年に作ったものを自分の blog エントリから振り返ってみますと… Perl から Fluentd にログ出力 - Fluent::Logger リリース 今年一番話題になったミドルウェアといえば fluentd でしょうか。その fluentd に Perl からログを出力するためのモジュールです Parallel::Benchmark というモジュールを書きました 並列にプロセスを起動して負荷を掛けるベンチマークを簡単に作るためのフレームワークです。弊社の主にソーシャルゲーム案件で、リリース前の負荷テ
CentOS 5 以下では、/etc/sysconfig/network-scripts/ifcfg-ethX の HWADDR= に MAC アドレスを指定することで、NIC と ethX の対応関係を変更することができました。しかし、CentOS 6.0 では、HWADDR= による入れ替えはできなくなりました。 CentOS 6.0 では、/etc/udev/rules.d/S70-persistent-net.rules の NAME= により、入れ替えを行うことができます。 # This file was automatically generated by the /lib/udev/write_net_rules # program, run by the persistent-net-generator.rules rules file. # # You can modif
CentOS 6.0 で NIC 交換 (オンボードの場合はマザーボード交換も含む) した場合でも、ethX が変化しないように、固定化する方法です。RHEL6 でも同様にして可能。 2015-01-18追記、CentOS7/RHEL7についてはこちらを参照。 CentOS 6.0 のデフォルトでは、MAC アドレスと ethX を対応付けており、交換により MAC が変化すると、自動的に新たな対応関係が作られるようになっているため、ethX がずれてしまいます。対応関係は、/etc/udev/rules.d/70-persistent-net.rules に設定されます。 このあたりについては、前に書いた記事を参照してください。 CentOS 6.0 で NIC 交換した場合の挙動 CentOS 6.0 で NIC と ethX の対応を変更する 以上が基礎知識ですが、まずは、この 70
8.2. インターフェース設定ファイル インターフェース設定ファイルは、個々のネットワークデバイス用のソフトウェア インターフェイスを制御します。システムはブートする時、これらのファイルを 使用してどのインターフェースを立ち上げるか、及びそれらをどのように構成するか を決定します。これらのファイルは通常、ifcfg-<name> と名付けられ、<name>の 部分には設定ファイルが制御するデバイスの名前が入ります。 8.2.1. イーサネットインターフェース 最も一般的なインターフェースファイルの1つは ifcfg-eth0で、これはシステム内の最初のイーサネットネットワークインターフェースカード すなわちNICを制御します。システム内に複数の NIC がある場合は、複数の ifcfg-eth<X>ファイル (<X>は特定のインターフェースに対する独自の番号)を用意します。各デバイスには独
最近勉強を始めたコンテナ技術に関する基礎的な知識をまとめました。 [訂正と注釈] p.27-30: 「Deployment」内の「Version: 1」 => 「Version: 2」 p.37: 「終了コードをから」 => 「終了コードから」 p.39: 「HTTPSが利用できない」=> AWS上では、SSL終端するLBがサポートされています。https://kubernetes.io/docs/concepts/services-networking/service/#ssl-support-on-aws p.40: 「ユーザがingress controllerをmaster上にセットアップする必要」 => master上にセットアップしなければならないという制約はありません。例えばGCEのingress controller(GLBC)はPodとして動作します。https://gi
SYN floodのコードをgithubで公開しました。 gitはやっと「一人」で作業するには問題ない程度になりました。 Linux Kernelが送信先からの[SYN,ACK]セグメントに対し[RST]セグメントを送信するのはIP_HDRINCLを設定していない うんぬんかんぬんでは無く、[SYN,ACK]セグメントの宛先ポートにクライアントがいないためのようです。 (中断すべき3way handshake, このコードはTCPスタックとは別のレイヤーにいるため) 実際の動作時はすべてのIPヘッダのアドレスはIPスプーフィングで偽造しているため問題なし。 TCPの3way handshakeの様子を確実に見るためには送信源アドレスをオプションで自ホストのアドレスに設定して下さい。 (See --help) C++歴が短いし(言い訳)、コードはアレなのでごめんなさい。 pfpacket/S
Boost.Optional Must Go - 野良C++erの雑記帳 Boost.Optional Must Go (2) - 野良C++erの雑記帳 最近、何回かに分けて、 Boost.Optional について、(細かい)不満を日記に書いてきました。 これは別に Boost.Optional が嫌いだから不満を書いた訳ではなく、むしろ その逆、 Boost.Optional が便利な分、逆に不満点が目立つので書いていたわけですが、 よく考えたら、 Boost.Optional の便利さを、纏まった記事で書いていないなー、 と、そう思い至ったので、この辺で Boost.Optional を徹底的に推奨する記事でも書いてみようかな、 というわけで、さんざん既出なネタばかりですが、折角なので書いてみることにしましたよ。 冒頭に挙げた以外で参考になるような記事は、この辺でしょうか: C++
以前、「正当性チェック関数でのエラーの返し方」というエントリでboost::optionalのような書き方を推奨したのですが、これはやらない方がいいかもしれません。 以下のようなファイルを開く関数があった場合、 struct ErrorCode { enum enum_t { FileNotFound }; }; boost::optional<ErrorCode::enum_t> FileOpen(const std::string& path); これを使うユーザーコードで、以下のように書いてしまうことがよくありました: if (FileOpen("a.txt")) { // ファイルが開けた!・・・えっ? } 「ファイルが開けたかどうか」をチェックして正常だったらthen節に流れることを意図していますが、これは間違いです。FileOpen()関数の戻り値は、boolに変換されてtru
[ C++で開発 ] [ Boostを使うメモ ] コマンドライン引数の解析 コマンドラインから実行するプログラムでは、コマンドライン引数に指定した内容を取り込む処理を記述することが多いです。引数の数が数個と少ない場合は、大抵その場限りのコーディングでお茶を濁しますが、ちょっと複雑なコマンドラインとなると、やはりライブラリの出番となります。 昔はCの非標準ライブラリ getopt の出番だったのですが、最近ではBoostに含まれる program_options を使用します。 boost::program_options 簡単なサンプルを示します。 コマンドラインで、以下3つのオプションを指定可能なプログラム mcast_send があったとします。 アドレスを表す文字列。プログラム中で取り込む型はstd::string。指定は必須。 ポート番号を表す文字列。プログラム中で取り込む型はi
この記事はC++ Advent Calendar 2012 12日目の記事です。 Boost.Asio、みなさんもお使いのことと存じますが、あれこのソケットなかったっけ? とかこれもAsioで使いたいなぁと思ったことはありませんか? そんな時のためにこの記事ではBoost.AsioのProtocol, socket option, serviceの拡張を扱います。 基礎知識: I/O service: ご存知boost::asio::io_service I/O object: 実際にAsioを使う人が触るobject。socketやtimerなど。(例: boost::asio::tcp::socket, boost::asio::deadline_timer等) Service: boost::asio::io_service::serviceを継承しI/O serviceに登録される
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く