David King
davidk@gnome.org 2013

This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International license.

As a special exception, the copyright holders give you permission to copy, modify, and distribute the example code contained in this documentation under the terms of your choosing, without restriction.

Client and server HTTP communication, portable socket-based networking IO, and network device management.
Fran Diéguez
frandieguez@gnome.org 2009-2020.
Leandro Regueiro
leandro.regueiro@gmail.com 2011.

# Low-level networking

Create powerful and flexible HTTP servers and clients

Use portable socket-based APIs in a UI without blocking

Detect and manage the network connection state

Take advantage of the portable networking APIs for accessing network services. Asynchronous IO keeps your application UI responsive while IO is in progress. Detect changes in the system networking state, to make your application respond appropriately when there is no Internet access.

# What can you do?

To asynchronously access low-level networking APIs, use GIO networking. Higher-level API is available for resolving proxies and DNS records as well as using secure sockets (TLS).

Simple monitoring of network state is available in GIO, but NetworkManager provides comprehensive support for networking devices and network topologies.

Libsoup provides a flexible interface for HTTP servers and clients. Both synchronous and asynchronous APIs are provided.

# Real-world examples

You can see lots of real-world applications of GNOME networking technologies in open source projects, like the examples given below.

Web is the GNOME browser, which uses libsoup to access HTTP services.

( Website | Screenshot | Source code )

GNOME Shell is the user-visible GNOME desktop, which uses NetworkManager for the network status menu, including managing wired, wireless, 3G modem and VPN networking systems.

( Website | Screenshot | Source Code )