<?xml version='1.0'?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->

<refentry id="sd_bus_get_n_queued_read">

  <refentryinfo>
    <title>sd_bus_get_fd</title>
    <productname>systemd</productname>
  </refentryinfo>

  <refmeta>
    <refentrytitle>sd_bus_get_n_queued_read</refentrytitle>
    <manvolnum>3</manvolnum>
  </refmeta>

  <refnamediv>
    <refname>sd_bus_get_n_queued_read</refname>
    <refname>sd_bus_get_n_queued_write</refname>

    <refpurpose>Get the number of pending bus messages in the read and write queues of a bus connection object</refpurpose>
  </refnamediv>

  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include &lt;systemd/sd-bus.h&gt;</funcsynopsisinfo>

      <funcprototype>
        <funcdef>int <function>sd_bus_get_n_queued_read</function></funcdef>
        <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
        <paramdef>uint64_t *<parameter>ret</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_bus_get_n_queued_write</function></funcdef>
        <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
        <paramdef>uint64_t *<parameter>ret</parameter></paramdef>
      </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>

  <refsect1>
    <title>Description</title>

    <para>
      <function>sd_bus_get_n_queued_read()</function> may be used to query the number of bus messages in the read queue
      of a bus connection object. The read queue contains all messages read from the transport medium (e.g. network
      socket) but not yet processed locally. The function expects two arguments: the bus object to query, and a pointer
      to a 64bit counter variable to write the current queue size to. Use <function>sd_bus_process()</function> in
      order to process queued messages, i.e. to reduce the size of the read queue (as well as, in fact, the write
      queue, see below).
    </para>

    <para>
      Similarly, <function>sd_bus_get_n_queued_write()</function> may be used to query the number of currently pending
      bus messages in the write queue of a bus connection object. The write queue contains all messages enqueued into
      the connection with a call such as <function>sd_bus_send()</function> but not yet written to the transport
      medium. The expected arguments are similar to <function>sd_bus_get_n_queued_read()</function>. Here too, use
      <function>sd_bus_process()</function> to reduce the size of the write queue. Alternatively, use
      <function>sd_bus_flush()</function> to synchronously write out any pending bus messages until the write queue is
      empty.
    </para>
  </refsect1>

  <refsect1>
    <title>Return Value</title>

    <para>On success, these functions return 0 or a positive integer. On failure, they return a negative errno-style
    error code.</para>

    <refsect2>
      <title>Errors</title>

      <para>Returned errors may indicate the following problems:</para>

      <variablelist>
        <varlistentry>
          <term><constant>-ECHILD</constant></term>

          <listitem><para>The bus connection was created in a different process.</para></listitem>
        </varlistentry>

      </variablelist>
    </refsect2>
  </refsect1>

  <refsect1>
    <title>See Also</title>

    <para>
      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_bus_process</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_bus_send</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_bus_flush</refentrytitle><manvolnum>3</manvolnum></citerefentry>
    </para>
  </refsect1>

</refentry>
