March Docs

NodeCall

NodeCall: caller-side Node.call and server-side RPC dispatch loop (P3 L4).

The glue between the transport (NetKernel) and the RPC core (NodeRpc): the caller sends a CallRequest frame and waits for the matching CallReply; the server-side dispatch loop reads request frames and sends reply frames. Uses dedicated RPC connections (not shared with SWIM gossip connections).

call is synchronous: it blocks the calling task until the reply arrives or the connection closes. March's green-thread scheduler yields on socket I/O, so a blocked call lets the server task run and vice versa.

Type annotations use bare names (Targets, RemoteRef, Pid, CallError) rather than qualified paths (NodeRpc.Targets, etc.) to avoid qualified-vs-bare unification failures at call sites.

Functions

fncallcall(fd : Int, fref : RemoteRef, args : List(Int),#
fnserve_loopserve_loop(targets : Targets, fd : Int) : ()#
fnserve_oneserve_one(targets : Targets, fd : Int) : Result((), String)#