def receive_message(
sock, operation, request_id, max_message_size=MAX_MESSAGE_SIZE):
"""Receive a raw BSON message or raise socket.error."""
header = _receive_data_on_socket(sock, 16)
length = _UNPACK_INT(header[:4])[0]
actual_op = _UNPACK_INT(header[12:])[0]
assert operation == actual_op, ("wire protocol error: "
"unknown opcode %r" % (actual_op,))
# No request_id for exhaust cursor "getMore".
if request_id is not None:
response_id = _UNPACK_INT(header[8:12])[0]
assert request_id == response_id, (
"wire protocol error: got response id %r but expected %r"
% (response_id, request_id))
assert length > 16, ("wire protocol error: message length is shorter"
" than standard message header: %r" % (length,))
assert length <= max_message_size, (
"wire protocol error: message length (%r) is larger than server max "
"message size (%r)" % (length, max_message_size))
return _receive_data_on_socket(sock, length - 16)
评论列表
文章目录