+
+ // Send procedures, with helpers for bookkeeping mode or not
+ void send1_no_bookkeeping(neighbor& nb);
+ void send1_bookkeeping(neighbor& nb);
+ void send();
+
+ // Receive procedure: wait (or not) for a message to come.
+ // Returns false if some "close" message was received, returns true
+ // otherwise.
+ enum recv_wait_mode { NO_WAIT = 0, WAIT, WAIT_FOR_CLOSE };
+ bool receive(recv_wait_mode wait);
+
+ // Finalize sends a "close" message to each neighbor and wait for
+ // all of them to answer.
+ void finalize1(neighbor& nb);