# File lib/mongo/networking.rb, line 110
    def receive_message(operation, message, log_message=nil, socket=nil, command=false,
                        read=:primary, exhaust=false)
      request_id = add_message_headers(message, operation)
      packed_message = message.to_s

      result = ''

      begin
        send_message_on_socket(packed_message, socket)
        result = receive(socket, request_id, exhaust)
      rescue ConnectionFailure => ex
        socket.close
        checkin(socket)
        raise ex
      rescue SystemStackError, NoMemoryError, SystemCallError => ex
        close
        raise ex
      rescue Exception => ex
        if defined?(IRB)
          close if ex.class == IRB::Abort
        end
        raise ex
      end
      result
    end