[erlang-questions] about Erlang C Node monitor
Yu-Teh Shen
shenyute@REDACTED
Tue Dec 15 02:35:38 CET 2009
Hi Matt,
Thanks a lot!
It help me a lot~
Shen, Yu-Teh
On Mon, Dec 14, 2009 at 4:48 PM, Matt Stancliff <sysop@REDACTED>wrote:
> Yu-Teh,
>
>
> On Dec 13, 2009, at 11:36 PM, Yu-Teh Shen wrote:
>
>> But what I should do if I want to *monitor* the C node like all other
>> Erlang
>> node and make erlang *connects*, *net_adm:ping* works?
>>
>
> You can use erlang:monitor_node to monitor C nodes.
>
> Handling net_adm:ping in a C node takes a few steps. Here is what I use:
>
> main processing loop:
> =====
> ETERM *gen_call = erl_format("~a", "$gen_call");
>
> while (loop) {
>
> got = erl_receive_msg(fd, buf, BUFSIZE, &emsg);
> if (got == ERL_TICK) {
> /* ignore */
> } else if (got == ERL_ERROR) {
> loop = 0;
>
> }
> else {
> if (emsg.type == ERL_REG_SEND) {
> msg = erl_element(1, emsg.msg);
> if (erl_match(_something_i_want_, msg)) {
> /* blah */
> }
> else if (erl_match(gen_call, msg)) {
> process_gen_call(fd, emsg.from, emsg.msg);
> }
> }
> }
> erl_free_term(msg);
> erl_free_term(emsg.msg);
> erl_free_term(emsg.to);
> erl_free_term(emsg.from);
> }
> erl_free_term(gen_call);
> =====
>
> Then, process_gen_call is:
> =====
> /* gen_call with is_auth is for handling net_adm:ping responses.
> The incoming message looks like:
> {'$gen_call', {<bob3@REDACTED>, #Ref<2394.0.0>},
> {is_auth, bob3@REDACTED}}
> You must respond with the reference (element 2 of tuple 2) and "yes"
> */
> static void process_gen_call(int fd, ETERM *from, ETERM *msg) {
> ETERM *is_auth = erl_format("~a", "is_auth");
> ETERM *args = erl_element(3, msg);
> ETERM *arg1 = erl_element(1, args);
> if (erl_match(is_auth, arg1)) {
> ETERM *fromp = erl_element(2, msg);
> ETERM *resp = erl_format("{~w, yes}", erl_element(2, fromp));
> erl_send(fd, from, resp);
> erl_free_compound(resp);
> erl_free_term(fromp);
> }
> erl_free_term(args);
> erl_free_term(arg1);
> erl_free_term(is_auth);
> }
> =====
>
>
> Hope that helps,
>
> -Matt
> --
> Matt Stancliff San Jose, CA
> AIM: seijimr iPhone: 678-591-9337
> "The best way to predict the future is to invent it." --Alan Kay
>
>
More information about the erlang-questions
mailing list