2009-09-25 9 views
5

Existe-t-il un moyen d'interroger la table de noms gérée par le démon epmd?Erlang: existe-t-il une API pour 'epmd'?

La fonction nodes() n'est pas très utile sur ce front.

REMARQUE: Je recherche une API de côté pour analyser la sortie générée via stdout.

Répondre

6

Pour interroger les noeuds visibles pour EPMD, appelez:

EpmdModule = net_kernel:epmd_module(). % erl_epmd by default 
EpmdModule:names(). 

Pour obtenir une liste des noeuds connectés et leurs ports:

erlang:system_info(dist). 
erlang:system_info(dist_ctrl). 

Les premiers retours d'appels vous le tableau dans un format crash dump. Si vous êtes intéressé par l'acquisition des ports réels, utilisez le second.

+0

Est-ce supposé fonctionner avec des nœuds avec des noms courts? C'est principalement ce que j'utilise et je n'obtiens pas les résultats attendus. – jldupont

+0

Assurez-vous que les nœuds sont connectés, par ex. appel net_adm: ping (mynode @ localhost). Travaille pour moi. – Zed

+0

J'aurais dû être plus explicite: je ne veux pas avoir à "connecter" explicitement les nœuds. Je veux juste savoir quels nœuds sont accessibles dans les limites d'un "nom de domaine court". – jldupont

3

Vous obtenez la même réponse que le code de Zed en faisant:

net_adm:names() 

Je ne sais pas si cela est une façon plus standard de le faire ou non.

+0

@rob charlton: Merci! – jldupont