anchor.diff:  do_send_message(Name, Message, Connections) ->
       %% Find a connection for the remote node, if we have one.
       case dict:find(Name, Connections) of
  -        {ok, undefined} ->
  +        {ok, []} ->
               %% Node was connected but is now disconnected.
               {error, disconnected};
  -        {ok, Pid} ->
  +        {ok, [Pid|_]} ->
  +            %% TODO: Eventually be smarter about the process identifier
  +            %% selection.
               gen_server:cast(Pid, {send_message, Message});
           error ->
               %% Node has not been connected yet.
  
positive.code: %% @private
  %%
  %% Function should enforce the invariant that all cluster members are
  %% keys in the dict pointing to undefined if they are disconnected or a
  %% socket pid if they are connected.
  %%
  maybe_connect({Name, _, _} = Node, Connections0) ->
      Connections = case dict:find(Name, Connections0) of
          %% Found in dict, and disconnected.
          {ok, undefined} ->
              case connect(Node) of
                  {ok, Pid} ->
                      dict:store(Name, Pid, Connections0);
                  _ ->
                      dict:store(Name, undefined, Connections0)
              end;
          %% Found in dict and connected.
          {ok, _Pid} ->
              Connections0;
          %% Not present; disconnected.
          error ->
              case connect(Node) of
                  {ok, Pid} ->
                      dict:store(Name, Pid, Connections0);
                  _ ->
                      dict:store(Name, undefined, Connections0)
              end
      end,
      Connections.
  
negative.code: get_local_state() ->
      gen_server:call(?MODULE, get_local_state, infinity).
  
  %% @doc Trigger function on connection close for a given node.
  on_down(Name, Function) ->
      gen_server:call(?MODULE, {on_down, Name, Function}, infinity).
  
  