NetworkMonitor
Added in version 2.32.
- class NetworkMonitor(*args, **kwargs)
GNetworkMonitor
provides an easy-to-use cross-platform API
for monitoring network connectivity. On Linux, the available
implementations are based on the kernel’s netlink interface and
on NetworkManager.
There is also an implementation for use inside Flatpak sandboxes.
Methods
- class NetworkMonitor
- can_reach(connectable: SocketConnectable, cancellable: Cancellable | None = None) bool
Attempts to determine whether or not the host pointed to by
connectable
can be reached, without actually trying to connect to it.This may return
True
even whenNetworkMonitor
:network-available isFalse
, if, for example,monitor
can determine thatconnectable
refers to a host on a local network.If
monitor
believes that an attempt to connect toconnectable
will succeed, it will returnTrue
. Otherwise, it will returnFalse
and seterror
to an appropriate error (such asHOST_UNREACHABLE
).Note that although this does not attempt to connect to
connectable
, it may still block for a brief period of time (eg, trying to do multicast DNS on the local network), so if you do not want to block, you should usecan_reach_async()
.Added in version 2.32.
- Parameters:
connectable – a
SocketConnectable
cancellable – a
Cancellable
, orNone
- can_reach_async(connectable: SocketConnectable, cancellable: Cancellable | None = None, callback: Callable[[...], None] | None = None, *user_data: Any) None
Asynchronously attempts to determine whether or not the host pointed to by
connectable
can be reached, without actually trying to connect to it.For more details, see
can_reach()
.When the operation is finished,
callback
will be called. You can then callcan_reach_finish()
to get the result of the operation.- Parameters:
connectable – a
SocketConnectable
cancellable – a
Cancellable
, orNone
callback – a
AsyncReadyCallback
to call when the request is satisfieduser_data – the data to pass to callback function
- can_reach_finish(result: AsyncResult) bool
Finishes an async network connectivity test. See
can_reach_async()
.- Parameters:
result – a
AsyncResult
- get_connectivity() NetworkConnectivity
Gets a more detailed networking state than
get_network_available()
.If
NetworkMonitor
:network-available isFalse
, then the connectivity state will beLOCAL
.If
NetworkMonitor
:network-available isTrue
, then the connectivity state will beFULL
(if there is full Internet connectivity),LIMITED
(if the host has a default route, but appears to be unable to actually reach the full Internet), orPORTAL
(if the host is trapped behind a “captive portal” that requires some sort of login or acknowledgement before allowing full Internet access).Note that in the case of
LIMITED
andPORTAL
, it is possible that some sites are reachable but others are not. In this case, applications can attempt to connect to remote servers, but should gracefully fall back to their “offline” behavior if the connection attempt fails.Added in version 2.44.
- get_default() NetworkMonitor
Gets the default
NetworkMonitor
for the system.Added in version 2.32.
- get_network_available() bool
Checks if the network is available. “Available” here means that the system has a default route available for at least one of IPv4 or IPv6. It does not necessarily imply that the public Internet is reachable. See
NetworkMonitor
:network-available for more details.Added in version 2.32.
- get_network_metered() bool
Checks if the network is metered. See
NetworkMonitor
:network-metered for more details.Added in version 2.46.
Properties
- class NetworkMonitor
- props.connectivity: NetworkConnectivity
More detailed information about the host’s network connectivity. See
get_connectivity()
andNetworkConnectivity
for more details.Added in version 2.44.
- props.network_available: bool
Whether the network is considered available. That is, whether the system has a default route for at least one of IPv4 or IPv6.
Real-world networks are of course much more complicated than this; the machine may be connected to a wifi hotspot that requires payment before allowing traffic through, or may be connected to a functioning router that has lost its own upstream connectivity. Some hosts might only be accessible when a VPN is active. Other hosts might only be accessible when the VPN is not active. Thus, it is best to use
can_reach()
orcan_reach_async()
to test for reachability on a host-by-host basis. (On the other hand, when the property isFalse
, the application can reasonably expect that no remote hosts at all are reachable, and should indicate this to the user in its UI.)See also
NetworkMonitor
::network-changed.Added in version 2.32.
- props.network_metered: bool
Whether the network is considered metered.
That is, whether the system has traffic flowing through the default connection that is subject to limitations set by service providers. For example, traffic might be billed by the amount of data transmitted, or there might be a quota on the amount of traffic per month. This is typical with tethered connections (3G and 4G) and in such situations, bandwidth intensive applications may wish to avoid network activity where possible if it will cost the user money or use up their limited quota. Anything more than a few hundreds of kilobytes of data usage per hour should be avoided without asking permission from the user.
If more information is required about specific devices then the system network management API should be used instead (for example, NetworkManager or ConnMan).
If this information is not available then no networks will be marked as metered.
See also
NetworkMonitor
:network-available.Added in version 2.46.
Signals
- class NetworkMonitor.signals
- network_changed(network_available: bool) None
Emitted when the network configuration changes.
Added in version 2.32.
- Parameters:
network_available – the current value of
NetworkMonitor
:network-available
Virtual Methods
- class NetworkMonitor
- do_can_reach(connectable: SocketConnectable, cancellable: Cancellable | None = None) bool
Attempts to determine whether or not the host pointed to by
connectable
can be reached, without actually trying to connect to it.This may return
True
even whenNetworkMonitor
:network-available isFalse
, if, for example,monitor
can determine thatconnectable
refers to a host on a local network.If
monitor
believes that an attempt to connect toconnectable
will succeed, it will returnTrue
. Otherwise, it will returnFalse
and seterror
to an appropriate error (such asHOST_UNREACHABLE
).Note that although this does not attempt to connect to
connectable
, it may still block for a brief period of time (eg, trying to do multicast DNS on the local network), so if you do not want to block, you should usecan_reach_async()
.Added in version 2.32.
- Parameters:
connectable – a
SocketConnectable
cancellable – a
Cancellable
, orNone
- do_can_reach_async(connectable: SocketConnectable, cancellable: Cancellable | None = None, callback: Callable[[...], None] | None = None, *user_data: Any) None
Asynchronously attempts to determine whether or not the host pointed to by
connectable
can be reached, without actually trying to connect to it.For more details, see
can_reach()
.When the operation is finished,
callback
will be called. You can then callcan_reach_finish()
to get the result of the operation.- Parameters:
connectable – a
SocketConnectable
cancellable – a
Cancellable
, orNone
callback – a
AsyncReadyCallback
to call when the request is satisfieduser_data – the data to pass to callback function
- do_can_reach_finish(result: AsyncResult) bool
Finishes an async network connectivity test. See
can_reach_async()
.- Parameters:
result – a
AsyncResult