<part>
  <title>GIO Overview</title>

  <chapter>
    <title>Introduction</title>

  <para>
    GIO is striving to provide a modern, easy-to-use VFS API that sits
    at the right level in the library stack, as well as other generally
    useful APIs for desktop applications (such as networking and
    D-Bus support). The goal is to overcome the shortcomings of GnomeVFS
    and provide an API that is so good that developers prefer it over raw
    POSIX calls. Among other things that means using GObject. It also means
    not cloning the POSIX API, but providing higher-level, document-centric
    interfaces.
  </para>

  <para>
    The abstract file system model of GIO consists of a number of
    interfaces and base classes for I/O and files:
    <variablelist>
       <varlistentry>
         <term>GFile</term>
         <listitem><para>reference to a file</para></listitem>
       </varlistentry>
       <varlistentry>
         <term>GFileInfo</term>
         <listitem><para>information about a file or filesystem</para></listitem>
       </varlistentry>
       <varlistentry>
         <term>GFileEnumerator</term>
         <listitem><para>list files in directories</para></listitem>
       </varlistentry>
       <varlistentry>
         <term>GDrive</term>
         <listitem><para>represents a drive</para></listitem>
       </varlistentry>
       <varlistentry>
         <term>GVolume</term>
         <listitem><para>represents a file system in an abstract way</para></listitem>
       </varlistentry>
       <varlistentry>
         <term>GMount</term>
         <listitem><para>represents a mounted file system</para></listitem>
       </varlistentry>
    </variablelist>
    Then there is a number of stream classes, similar to the input and
    output stream hierarchies that can be found in frameworks like Java:
    <variablelist>
       <varlistentry>
         <term>GInputStream</term>
         <listitem><para>read data</para></listitem>
       </varlistentry>
       <varlistentry>
         <term>GOutputStream</term>
         <listitem><para>write data</para></listitem>
       </varlistentry>
       <varlistentry>
         <term>GIOStream</term>
         <listitem><para>read and write data</para></listitem>
       </varlistentry>
       <varlistentry>
         <term>GSeekable</term>
         <listitem><para>interface optionally implemented by streams to support seeking</para></listitem>
       </varlistentry>
    </variablelist>
    There are interfaces related to applications and the types
    of files they handle:
    <variablelist>
       <varlistentry>
          <term>GAppInfo</term>
          <listitem><para>information about an installed application</para></listitem>
       </varlistentry>
       <varlistentry>
          <term>GIcon</term>
          <listitem><para>abstract type for file and application icons</para></listitem>
       </varlistentry>
    </variablelist>
    There is a framework for storing and retrieving application settings:
    <variablelist>
       <varlistentry>
          <term>GSettings</term>
          <listitem><para>stores and retrieves application settings</para></listitem>
       </varlistentry>
    </variablelist>
    There is support for network programming, including connectivity monitoring,
    name resolution, lowlevel socket APIs and highlevel client and server
    helper classes:
    <variablelist>
       <varlistentry>
          <term>GSocket</term>
          <listitem><para>lowlevel platform independent socket object</para></listitem>
       </varlistentry>
       <varlistentry>
          <term>GResolver</term>
          <listitem><para>asynchronous and cancellable DNS resolver</para></listitem>
       </varlistentry>
       <varlistentry>
          <term>GSocketClient</term>
          <listitem><para>high-level network client helper</para></listitem>
       </varlistentry>
       <varlistentry>
          <term>GSocketService</term>
          <listitem><para>high-level network server helper</para></listitem>
       </varlistentry>
       <varlistentry>
          <term>GSocketConnection</term>
          <listitem><para>network connection stream</para></listitem>
       </varlistentry>
       <varlistentry>
          <term>GNetworkMonitor</term>
          <listitem><para>network connectivity monitoring</para></listitem>
       </varlistentry>
    </variablelist>
    There is support for connecting to <ulink url="http://www.freedesktop.org/wiki/Software/dbus">D-Bus</ulink>,
    sending and receiving messages, owning and watching bus names,
    and making objects available on the bus:
    <variablelist>
       <varlistentry>
          <term>GDBusConnection</term>
          <listitem><para>a D-Bus connection</para></listitem>
       </varlistentry>

       <varlistentry>
          <term>GDBusMethodInvocation</term>
          <listitem><para>for handling remote calls</para></listitem>
       </varlistentry>

       <varlistentry>
          <term>GDBusServer</term>
          <listitem><para>helper for accepting connections</para></listitem>
       </varlistentry>

       <varlistentry>
          <term>GDBusProxy</term>
          <listitem><para>proxy to access D-Bus interfaces on a remote object</para></listitem>
       </varlistentry>

    </variablelist>
    Beyond these, GIO provides facilities for file monitoring,
    asynchronous I/O and filename completion. In addition to the
    interfaces, GIO provides implementations for the local case.
    Implementations for various network file systems are provided
    by the GVFS package as loadable modules.
  </para>

  <para>
    Other design choices which consciously break with the GnomeVFS
    design are to move backends out-of-process, which minimizes the
    dependency bloat and makes the whole system more robust. The backends
    are not included in GIO, but in the separate GVFS package. The GVFS
    package also contains the GVFS daemon, which spawn further mount
    daemons for each individual connection.
  </para>

  <figure id="gvfs-overview">
    <title>GIO in the GTK+ library stack</title>
    <graphic fileref="gvfs-overview.png" format="PNG"></graphic>
  </figure>

  <para>
    The GIO model of I/O is stateful: if an application establishes e.g.
    a SFTP connection to a server, it becomes available to all applications
    in the session; the user does not have to enter his password over
    and over again.
  </para>
  <para>
    One of the big advantages of putting the VFS in the GLib layer
    is that GTK+ can directly use it, e.g. in the filechooser.
  </para>
  </chapter>

  <chapter>
    <title>Writing GIO applications</title>

    <para>
      The information in the GLib <ulink url="http://developer.gnome.org/glib/stable/glib-programming.html">documentation</ulink> about writing GLib
      applications is generally applicable when writing GIO applications.
    </para>

    <simplesect><title>Threads</title>

    <para>
       GDBus has its own private worker thread, so applications using
       GDBus have at least 3 threads. GIO makes heavy use of the concept
       of a <link linkend="g-main-context-push-thread-default">thread-default
       main context</link> to execute callbacks of asynchronous
       methods in the same context in which the operation was started.
    </para>

    </simplesect>

    <simplesect id="async-programming"><title>Asynchronous Programming</title>

    <para>
      Many GIO functions come in two versions: synchronous and asynchronous,
      denoted by an <code>_async</code> suffix. It is important to use these
      appropriately: synchronous calls should not be used from
      within a main loop which is shared with other code, such as one in the
      application’s main thread. Synchronous calls block until they complete,
      and I/O operations can take noticeable amounts of time (even on ‘fast’
      SSDs). Blocking a main loop iteration while waiting for I/O means that
      other sources in the main loop will not be dispatched, such as input and
      redraw handlers for the application’s UI. This can cause the application
      to ‘freeze’ until I/O completes.
    </para>

    <para>
      A few self-contained groups of functions, such as code generated by
      <link linkend="gdbus-codegen"><application>gdbus-codegen</application></link>,
      use a different convention: functions are asynchronous default, and it is
      the <emphasis>synchronous</emphasis> version which has a
      <code>_sync</code>
      suffix. Aside from naming differences, they should be treated the same
      way as functions following the normal convention above.
    </para>

    <para>
      The asynchronous (<code>_async</code>) versions of functions return
      control to the caller immediately, after scheduling the I/O in the kernel
      and adding a callback for it to the main loop. This callback will be
      invoked when the operation has completed. From the callback, the paired
      <code>_finish</code> function should be called to retrieve the return
      value of the I/O operation, and any errors which occurred. For more
      information on using and implementing asynchronous functions, see
      <link linkend="GAsyncResult.description"><type>GAsyncResult</type></link>
      and <link linkend="GTask.description"><type>GTask</type></link>.
    </para>

    <para>
      By starting multiple asynchronous operations in succession, they will be
      executed in parallel (up to an arbitrary limit imposed by GIO’s internal
      worker thread pool).
    </para>

    <para>
      The synchronous versions of functions can be used early in application
      startup when there is no main loop to block, for example to load initial
      configuration files. They can also be used for I/O on files which are
      guaranteed to be small and on the local disk. Note that the user’s home
      directory is not guaranteed to be on the local disk.
    </para>
    </simplesect>

    <simplesect><title>Security</title>

<para>
When your program needs to carry out some privileged operation (say,
create a new user account), there are various ways in which you can go
about this:
<itemizedlist>
<listitem><para>
Implement a daemon that offers the privileged operation. A convenient
way to do this is as a D-Bus system-bus service. The daemon will probably
need ways to check the identity and authorization of the caller before
executing the operation. <ulink url="http://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html">polkit</ulink> is a framework that allows this.
</para></listitem>
<listitem><para>
Use a small helper that is executed with elevated privileges via
pkexec. <ulink url="http://www.freedesktop.org/software/polkit/docs/latest/pkexec.1.html">pkexec</ulink> is a small program launcher that is part of polkit.
</para></listitem>
<listitem><para>
Use a small helper that is executed with elevated privileges by
being suid root.
</para></listitem>
</itemizedlist>
None of these approaches is the clear winner, they all have their
advantages and disadvantages.
</para>

<para>
When writing code that runs with elevated privileges, it is important
to follow some basic rules of secure programming. David Wheeler has an
excellent book on this topic,
<ulink url="http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/index.html">Secure Programming for Linux and Unix HOWTO</ulink>.
</para>

<para>
When using GIO in code that runs with elevated privileges, you have to
be careful. GIO has extension points whose implementations get loaded
from modules (executable code in shared objects), which could allow
an attacker to sneak his own code into your application by tricking it
into loading the code as a module. However, GIO will never load modules
from your home directory except when explicitly asked to do so via an
environment variable.
</para>

<para>
In most cases, your helper program should be so small that you don't
need GIO, whose APIs are largely designed to support full-blown desktop
applications. If you can't resist the convenience of these APIs, here
are some steps you should take:
<itemizedlist>
<listitem><para>
Clear the environment, e.g. using the <function>clearenv()</function>
function.
David Wheeler has a good <ulink url="http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/environment-variables.html">explanation</ulink> for why it is
important to sanitize the environment.
See <xref linkend="running-gio-apps"/>
for a list of all environment variables affecting GIO. In particular,
<envar>PATH</envar> (used to locate binaries), <envar>GIO_EXTRA_MODULES</envar> (used to locate loadable modules) and <envar>DBUS_{SYSTEM,SESSION}_BUS_ADDRESS</envar> (used to locate the D-Bus system and session bus) are important.
</para></listitem>
<listitem><para>
Don't use GVfs, by setting <envar>GIO_USE_VFS=local</envar> in the environment.
The reason to avoid GVfs in security-sensitive programs is that it uses
many libraries which have not necessarily been audited for security problems.
Gvfs is also heavily distributed and relies on a session bus to be present.
</para></listitem>
</itemizedlist>
</para>

    </simplesect>

  </chapter>

  <chapter>
    <title>Compiling GIO applications</title>

    <para>
      GIO comes with a <filename>gio-2.0.pc</filename> file that you
      should use together with <literal>pkg-config</literal> to obtain
      the necessary information about header files and libraries. See
      the <literal>pkg-config</literal> man page or the GLib documentation
      for more information on how to use <literal>pkg-config</literal>
      to compile your application.
    </para>

    <para>
      If you are using GIO on UNIX-like systems, you may want to use
      UNIX-specific GIO interfaces such as #GUnixInputStream,
      #GUnixOutputStream, #GUnixMount or #GDesktopAppInfo.
      To do so, use the <filename>gio-unix-2.0.pc</filename> file
      instead of <filename>gio-2.0.pc</filename>
    </para>
  </chapter>

  <chapter id="running-gio-apps">
    <title>Running GIO applications</title>

    <para>
      GIO inspects a few environment variables in addition to the
      ones used by GLib.
    </para>

    <formalpara>
      <title><envar>XDG_DATA_HOME</envar>, <envar>XDG_DATA_DIRS</envar></title>

      <para>
        GIO uses these environment variables to locate MIME information.
        For more information, see the <ulink url="http://freedesktop.org/Standards/shared-mime-info-spec">Shared MIME-info Database</ulink>
        and the <ulink url="http://freedesktop.org/Standards/basedir-spec">Base Directory Specification</ulink>.
      </para>
    </formalpara>

    <formalpara>
      <title><envar>GVFS_DISABLE_FUSE</envar></title>

      <para>
        This variable can be set to keep #Gvfs from starting the fuse backend,
        which may be unwanted or unnecessary in certain situations.
      </para>
    </formalpara>

    <formalpara>
      <title><envar>GIO_USE_VFS</envar></title>

      <para>
        This environment variable can be set to the name of a #GVfs
        implementation to override the default for debugging purposes.
        The #GVfs implementation for local files that is included in GIO
        has the name "local", the implementation in the gvfs module has
        the name "gvfs".  Most commonly, system software will set this to "local"
        to avoid having `GFile` APIs perform unnecessary D-Bus calls.
      </para><para>
        The special value <literal>help</literal> can be used to print a list of
        available implementations to standard output.
      </para>
    </formalpara>

    <para>
      The following environment variables are only useful for debugging
      GIO itself or modules that it loads. They should not be set in a
      production environment.
    </para>

    <formalpara>
      <title><envar>GIO_USE_FILE_MONITOR</envar></title>

      <para>
        This variable can be set to the name of a #GFileMonitor
        implementation to override the default for debugging purposes.
        The #GFileMonitor implementation for local files that is included
        in GIO on Linux has the name "inotify", others that are built
        are built as modules (depending on the platform) are called
        "fam" and "fen".
      </para><para>
        The special value <literal>help</literal> can be used to print a list of
        available implementations to standard output.
      </para>
    </formalpara>

    <formalpara>
      <title><envar>GIO_USE_VOLUME_MONITOR</envar></title>

      <para>
        This variable can be set to the name of a #GVolumeMonitor
        implementation to override the default for debugging purposes.
        The #GVolumeMonitor implementation for local files that is included
        in GIO has the name "unix", the udisks2-based implementation in the
        gvfs module has the name "udisks2".
      </para><para>
        The special value <literal>help</literal> can be used to print a list of
        available implementations to standard output.
      </para>
    </formalpara>

    <formalpara>
      <title><envar>GIO_USE_TLS</envar></title>

      <para>
        This variable can be set to the name of a #GTlsBackend
        implementation to override the default for debugging purposes.
        GIO does not include a #GTlsBackend implementation, the gnutls-based
        implementation in the glib-networking module has the name "gnutls".
      </para><para>
        The special value <literal>help</literal> can be used to print a list of
        available implementations to standard output.
      </para>
    </formalpara>

    <formalpara>
      <title><envar>GIO_MODULE_DIR</envar></title>

      <para>
        When this environment variable is set to a path, GIO will load
	modules from this alternate directory instead of the directory
	built into GIO. This is useful when running tests, for example.
      </para>
      <para>
        This environment variable is ignored when running in a setuid program.
      </para>
    </formalpara>

    <formalpara>
      <title><envar>GIO_EXTRA_MODULES</envar></title>

      <para>
        When this environment variable is set to a path, or a set of
        paths separated by a colon, GIO will attempt to load
        additional modules from within the path.
      </para>
      <para>
        This environment variable is ignored when running in a setuid program.
      </para>
    </formalpara>

    <formalpara>
      <title><envar>GSETTINGS_BACKEND</envar></title>

      <para>
        This variable can be set to the name of a #GSettingsBackend
        implementation to override the default for debugging purposes.
        The memory-based implementation that is included in GIO has
        the name "memory", the one in dconf has the name "dconf".
      </para><para>
        The special value <literal>help</literal> can be used to print a list of
        available implementations to standard output.
      </para>
    </formalpara>

    <formalpara>
      <title><envar>GSETTINGS_SCHEMA_DIR</envar></title>

      <para>
        This variable can be set to the names of directories to consider when looking for compiled schemas for #GSettings,
        in addition to the <filename>glib-2.0/schemas</filename>
        subdirectories of the XDG system data dirs. To specify multiple directories, use <constant>G_SEARCHPATH_SEPARATOR_S</constant> as a separator.
      </para>
    </formalpara>

   <formalpara>
      <title><envar>DBUS_SYSTEM_BUS_ADDRESS</envar></title>

      <para>
        This variable is consulted to find the address of the D-Bus system
        bus. For the format of D-Bus addresses, see the D-Bus
        <ulink url="http://dbus.freedesktop.org/doc/dbus-specification.html#addresses">specification</ulink>.
      </para>
      <para>
        Setting this variable overrides platform-specific ways of determining
        the system bus address.
      </para>
   </formalpara>

   <formalpara>
      <title><envar>DBUS_SESSION_BUS_ADDRESS</envar></title>

      <para>
        This variable is consulted to find the address of the D-Bus session bus.
      </para>
      <para>
        Setting this variable overrides platform-specific ways of determining
        the session bus address.
      </para>
   </formalpara>

   <formalpara>
      <title><envar>DBUS_STARTER_BUS_TYPE</envar></title>

      <para>
        This variable is consulted to find out the 'starter' bus for an
        application that has been started via D-Bus activation. The possible
        values are 'system' or 'session'.
      </para>
   </formalpara>

   <formalpara>
      <title><envar>G_DBUS_DEBUG</envar></title>

      <para>
         This variable can be set to a list of debug options, which
         cause GLib to print out different types of debugging
         information when using the D-Bus routines.
         <variablelist>
           <varlistentry>
             <term>transport</term>
             <listitem><para>Show IO activity (e.g. reads and writes)</para></listitem>
           </varlistentry>
           <varlistentry>
             <term>message</term>
             <listitem><para>Show all sent and received D-Bus messages</para></listitem>
           </varlistentry>
           <varlistentry>
             <term>payload</term>
             <listitem><para>Show payload for all sent and received D-Bus messages (implies message)</para></listitem>
           </varlistentry>
           <varlistentry>
             <term>call</term>
             <listitem><para>Trace g_dbus_connection_call() and g_dbus_connection_call_sync() API usage</para></listitem>
           </varlistentry>
           <varlistentry>
             <term>signal</term>
             <listitem><para>Show when a D-Bus signal is received</para></listitem>
           </varlistentry>
           <varlistentry>
             <term>incoming</term>
             <listitem><para>Show when an incoming D-Bus method call is received</para></listitem>
           </varlistentry>
           <varlistentry>
             <term>return</term>
             <listitem><para>Show when a reply is returned via the #GDBusMethodInvocation API</para></listitem>
           </varlistentry>
           <varlistentry>
             <term>emission</term>
             <listitem><para>Trace g_dbus_connection_emit_signal() API usage</para></listitem>
           </varlistentry>
           <varlistentry>
             <term>authentication</term>
             <listitem><para>Show information about connection authentication</para></listitem>
           </varlistentry>
           <varlistentry>
             <term>address</term>
             <listitem><para>Show information about D-Bus address lookups and autolaunching</para></listitem>
           </varlistentry>
         </variablelist>
         The special value <literal>all</literal> can be used to turn
         on all debug options. The special value
         <literal>help</literal> can be used to print a list of
         supported options to standard output.
      </para>
   </formalpara>

   <formalpara>
      <title><envar>G_DBUS_COOKIE_SHA1_KEYRING_DIR</envar></title>

      <para>
        Can be used to override the directory used to store the
        keyring used in the <literal>DBUS_COOKIE_SHA1</literal>
        authentication mechanism. Normally the directory used is
        <filename>.dbus-keyrings</filename> in the user's home
        directory.
      </para>
   </formalpara>

   <formalpara>
      <title><envar>G_DBUS_COOKIE_SHA1_KEYRING_DIR_IGNORE_PERMISSION</envar></title>

      <para>
        If set, the permissions of the directory used to store the
        keyring used in the <literal>DBUS_COOKIE_SHA1</literal>
        authentication mechanism won't be checked. Normally the
        directory must be readable only by the user.
      </para>
   </formalpara>
  </chapter>

  <chapter id="extending-gio">
    <title>Extending GIO</title>

    <para>
      A lot of the functionality that is accessible through GIO
      is implemented in loadable modules, and modules provide a convenient
      way to extend GIO. In addition to the #GIOModule API which supports
      writing such modules, GIO has a mechanism to define extension points,
      and register implementations thereof, see #GIOExtensionPoint.
    </para>
    <para>
      The following extension points are currently defined by GIO:
    </para>

    <formalpara>
       <title>G_VFS_EXTENSION_POINT_NAME</title>

       <para>
          Allows to override the functionality of the #GVfs class.
          Implementations of this extension point must be derived from #GVfs.
          GIO uses the implementation with the highest priority that is active,
          see g_vfs_is_active().
       </para>
       <para>
          GIO implements this extension point for local files, gvfs contains
          an implementation that supports all the backends in gvfs.
       </para>
   </formalpara>

   <formalpara>
      <title>G_VOLUME_MONITOR_EXTENSION_POINT_NAME</title>

      <para>
         Allows to add more volume monitors.
         Implementations of this extension point must be derived from
         #GVolumeMonitor. GIO uses all registered extensions.
      </para>
      <para>
        gvfs contains an implementation that works together with the #GVfs
        implementation in gvfs.
      </para>
   </formalpara>

   <formalpara>
      <title>G_NATIVE_VOLUME_MONITOR_EXTENSION_POINT_NAME</title>

      <para>
         Allows to override the 'native' volume monitor.
         Implementations of this extension point must be derived from
         #GNativeVolumeMonitor. GIO uses the implementation with
         the highest priority that is supported, as determined by the
         is_supported() vfunc in #GVolumeMonitorClass.
      </para>
      <para>
         GIO implements this extension point for local mounts,
         gvfs contains a udisks2-based implementation.
      </para>
   </formalpara>

   <formalpara>
      <title>G_LOCAL_FILE_MONITOR_EXTENSION_POINT_NAME</title>

      <para>
        Allows to override the file monitor implementation for
        local files. Implementations of this extension point must
        be derived from #GLocalFileMonitor. GIO uses the implementation
        with the highest priority that is supported, as determined by the
        is_supported() vfunc in #GLocalFileMonitorClass.
      </para>
      <para>
        GIO uses this extension point internally, to switch between
        its fam-based and inotify-based file monitoring implementations.
      </para>
   </formalpara>

   <formalpara>
      <title>G_LOCAL_DIRECTORY_MONITOR_EXTENSION_POINT_NAME</title>

      <para>
        Allows to override the directory monitor implementation for
        local files. Implementations of this extension point must be
        derived from #GLocalDirectoryMonitor. GIO uses the implementation
        with the highest priority that is supported, as determined by the
        is_supported() vfunc in #GLocalDirectoryMonitorClass.
      </para>
      <para>
        GIO uses this extension point internally, to switch between
        its fam-based and inotify-based directory monitoring implementations.
      </para>
   </formalpara>

   <formalpara>
      <title>G_DESKTOP_APP_INFO_LOOKUP_EXTENSION_POINT_NAME</title>

      <para>
        Unix-only. Allows to provide a way to associate default handlers
        with URI schemes. Implementations of this extension point must
        implement the #GDesktopAppInfoLookup interface. GIO uses the
        implementation with the highest priority.
      </para>
      <para>
        This extension point has been discontinued in GLib 2.28. It is
        still available to keep API and ABI stability, but GIO is no
        longer using it for default handlers. Instead, the mime handler
        mechanism is used, together with x-scheme-handler pseudo-mimetypes.
      </para>
   </formalpara>

   <formalpara>
      <title>G_SETTINGS_BACKEND_EXTENSION_POINT_NAME</title>

      <para>
        Allows to provide an alternative storage for #GSettings.
        Implementations of this extension point must derive from the
        #GSettingsBackend type. GIO contains a keyfile-based
        implementation of this extension point, another one is provided
        by dconf.
      </para>
   </formalpara>

   <formalpara>
     <title>G_PROXY_EXTENSION_POINT_NAME</title>

     <para>
       Allows to provide implementations for network proxying.
       Implementations of this extension point must provide the
       #GProxy interface, and must be named after the network
       protocol they are proxying.
     </para>
     <para>
       glib-networking contains an implementation of this extension
       point based on libproxy.
     </para>
   </formalpara>
   <formalpara>
     <title>G_TLS_BACKEND_EXTENSION_POINT_NAME</title>

     <para>
       Allows to provide implementations for TLS support.
       Implementations of this extension point must implement
       the #GTlsBackend interface.
     </para>
     <para>
       glib-networking contains an implementation of this extension
       point.
     </para>
   </formalpara>

   <formalpara>
     <title>G_NETWORK_MONITOR_EXTENSION_POINT_NAME</title>

     <para>
       Allows to provide implementations for network connectivity
       monitoring.
       Implementations of this extension point must implement
       the #GNetworkMonitorInterface interface.
     </para>
     <para>
       GIO contains an implementation of this extension point
       that is using the netlink interface of the Linux kernel.
     </para>
   </formalpara>
  </chapter>
</part>

