docs: def receive(self, sock):
      """Receive a message on ``sock``."""
      msg = None
      data = b''
      recv_done = False
      recv_len = -1
      while not recv_done:
        buf = sock.recv(BUFSIZE)
        if buf is None or len(buf) == 0:
          raise Exception("socket closed")
        if recv_len == -1:
          recv_len = struct.unpack('>I', buf[:4])[0]
          data += buf[4:]
          recv_len -= len(data)
        else:
          data += buf
          recv_len -= len(buf)
        recv_done = (recv_len == 0)
  
      msg = pickle.loads(data)
      return msg