code: def receive_message(sock, request_id, max_message_size=MAX_MESSAGE_SIZE):
      
      # Ignore the response's request id.
      length, _, response_to, op_code = _UNPACK_HEADER(
          _receive_data_on_socket(sock, 16))
      # No request_id for exhaust cursor "getMore".
      if request_id is not None:
          if request_id != response_to:
              raise ProtocolError("Got response id %r but expected "
                                  "%r" % (response_to, request_id))
      if length <= 16:
          raise ProtocolError("Message length (%r) not longer than standard "
                              "message header size (16)" % (length,))
      if length > max_message_size:
          raise ProtocolError("Message length (%r) is larger than server max "
                              "message size (%r)" % (length, max_message_size))
      if op_code == 2012:
          op_code, _, compressor_id = _UNPACK_COMPRESSION_HEADER(
              _receive_data_on_socket(sock, 9))
          data = decompress(
              _receive_data_on_socket(sock, length - 25), compressor_id)
      else:
          data = _receive_data_on_socket(sock, length - 16)
  
      try:
          unpack_reply = _UNPACK_REPLY[op_code]
      except KeyError:
          raise ProtocolError("Got opcode %r but expected "
                              "%r" % (op_code, _UNPACK_REPLY.keys()))
      return unpack_reply(data)
docs: Receive a raw BSON message or raise socket.error.