anchor.diff:    case get_socket(S, Id) of
       Sock = #socket{} ->
         Sock#socket.socket == Socket andalso
  -      Sock#socket.tcp_state == listen;
  +      Sock#socket.tcp_state == listen andalso
  +      (Sock#socket.blocked == [] orelse S#state.synchronized);
  +        %% ^ Make sure we're synchronized if there are other accept calls
  +        %%   so we can predict which one will be unblocked first.
       false -> false
     end.
   
  
positive.code: deliver_callouts(S, [Id]) ->
    Sock = get_socket(S, Id),
    ?SET(Id, rcvd, Sock#socket.seq).
  
  %% --- timeout ---
  
  
negative.code:       ?APPLY(set_socket, [NewId]);
      [] ->
        ?SET(Id, blocked, Sock#socket.blocked ++ [?SELF]),
        ?APPLY(set_synchronized, [false]),  %% Avoid nondeterminism from racing accept calls
        ?MATCH(NewId, ?BLOCK({accept, ?SELF})),
        ?WHEN(NewId /= closed, ?APPLY(set_socket, [NewId]))
    end.
  