anchor.diff:  handle_call({ping},_From,S) ->
       Reply = send_ping(S#ej.peer),
       {reply, Reply,S};
  +handle_call({restart},_From,S) ->
  +    {Reply, NewS} =
  +    case shutdown_peer(S#ej.peer) of
  +        ok ->
  +            Peer = handshake(S#ej.bindir),
  +            {ok, populate_peer(Peer,S)};
  +        _Any -> 
  +            {{error,shutdown},S}
  +    end,
  +    {reply, Reply, NewS};
   handle_call({bad},_From,S) ->
       erlang:foobar(),
       {noreply,S};
  
positive.code: -behaviour(gen_server).
  
  % public interface
  -export([send/2, call/2, call/3, ping/0]).
  -export([start/0, start/1, start/2, start_link/0, start_link/1, start_link/2, stop/0]).
  
  % gen_server exports
  
negative.code:     {ok,S1}.
  
  % @hidden     
  handle_call({send,Ref,Tag,Msg},From,S) ->
      {W, L} = f:lrot(S#ej.workers),
      gen_server:cast(W,{send,From,Ref,Tag,Msg}),
  