2012-08-31 12 views
7

接続されたerlangノードのIPアドレスを取得する簡単な方法はありますか?私はいくつかのノードとのSCTP接続を開始したいと思いますし、システムが設計されている方法のために、私が知っているのは彼らのnode()アトムです。erlangノードのIPアドレスを取得するにはどうすればよいですか?

より正確には、識別子atom()が指定されたノードのIPアドレスを取得できるErlang(またはいくつかの派生技術)によって提供されるAPIがあるかどうか疑問に思っています。

答えて

4

あなたは外国人のノード上の関数を呼び出すために、RPCモジュールを使用することができます

例:

rpc:call(Node,inet,getif,[]) 

注:すでにアーラン分布を介して接続されているノード上でのみ動作

2

ノードでプロセスを開始し、そのプロセスにIPアドレスを含むメッセージを送信させることで、この問題を解決しました。誰かがより洗練されたソリューションを知っているなら、私はそれを聞きたいと思います。

ノード上でプロセスを開始したあとにアドレスを取得するために使用したコマンドは、inet:getif()です。そのコマンドの結果には、ループバックアドレスが含まれていることに注意してください。

各ノードが複数のIPアドレスを持ち、SCTPサーバーがそれらのすべてをリッスンしていない可能性があります。

私が試した考えは、node()から返されたアトムを文字列に変換し、文字列を解析してホスト名を取得し、DNSルックアップを実行することでした。それはうまくいくかもしれませんが、私はそれを試みたことはありません。 DNSルックアップの結果はキャッシュされるべきであるため、ネットワークラウンドトリップはないかもしれません。また、node()からのアトムリターンについて何かを仮定するのは本当に嫌です。

+0

ええ、私はそれについて考えましたが、私はデータを送信する必要があることを知る時間とデータの実際の送信の時間を最小限に抑えたいので、余分な前後のサイクルが最後の手段になります。 – matehat

2

それをすべてのノードでnet_kernel:nodes_info()のように見え、単一のノードではnet_kernel:node_info(Node)のように見えます。この情報は、manページに公開されているようには見えません。これは、関数を送ることができないJavaやCノードのようなものでも動作するため、より良い解決策のように思えます。

関連する問題