docs: def __die(self, synchronous=False):
          """Closes this cursor.
          """
          if self.__id and not self.__killed:
              if self.__exhaust and self.__exhaust_mgr:
                  # If this is an exhaust cursor and we haven't completely
                  # exhausted the result set we *must* close the socket
                  # to stop the server from sending more data.
                  self.__exhaust_mgr.sock.close()
              else:
                  address = _CursorAddress(
                      self.__address, self.__collection.full_name)
                  if synchronous:
                      self.__collection.database.client._close_cursor_now(
                          self.__id, address)
                  else:
                      self.__collection.database.client.close_cursor(
                          self.__id, address)
          if self.__exhaust and self.__exhaust_mgr:
              self.__exhaust_mgr.close()
          self.__killed = True