ZeroMQ: 複数のEndpointに接続する

ちゃんとドキュメントを読めという話かもしれないが、ZeroMQ のソケットが 複数のEndpointにbind/connectできることを最近知った。そこで、複数のEndpointに対してのbind/connectを 使ったメッセージングのパターンをいくつか考えてみた。 1. ローカル/リモ…

通信時のソースアドレスを取得する

※Linuxです。 なんて言えばよいのかわからなかったのですが、ip route get xxx.xxx.xxx.xxxと打ったときに出てくる ソース(送信元)アドレスをC/C++内で取得したかった。すぐに思いついた方法は、 popenを使ってip route getを実行し、標準出力を取得 一時…

ソケットに結び付けられたアドレスを取得する

※Linuxです。 netstatしたときのLocal AddressとForeign AddressにあたるものをC/C++で取得したかった。 Local Addressはgetsockname()、Foreign Addressはgetpeername()を使えば取得できるらしい。 C++でサンプルを書くと以下のような感じ。 gist6c0628fe0a…

ZeroMQのheartbeatを試してみた

ZeroMQのversion 4.2からheartbeat機能が追加されました。 元々コネクションの切断は検知してzmq_socket_monitor(3)で通知してくれたのですが、 TCPエラーを吐かずにコネクションが死んだり、Out of Memory等でプロセスが止まったりした場合は検知できないの…

ZeroMQのzmq_socket_monitor(3)の挙動を調べた

ZeroMQのzmq_socket_monitor(3)の挙動を調べてみました。 bindするソケットとconnectするソケットを用意し、以下の順に処理して zmq_socket_monitor(3)でどのようなイベントが通知されるか確認しました。 create (bind/connect socket) bind connect disconn…