+typedef struct {
+ GNetworkMonitor *monitor;
+ GMainLoop *loop;
+ GSocketAddress *sockaddr;
+ gboolean should_be_reachable;
+} CanReachData;
+
+static void
+reach_cb (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GError *error = NULL;
+ gboolean reachable;
+ CanReachData *data = user_data;
+
+ reachable = g_network_monitor_can_reach_finish (data->monitor, res, &error);
+
+ if (data->should_be_reachable)
+ g_assert_no_error (error);
+ else
+ {
+ g_assert (error != NULL);
+ g_clear_error (&error);
+ }
+ g_assert (reachable == data->should_be_reachable);
+
+ g_main_loop_quit (data->loop);
+}
+
+static gboolean
+test_reach_async (gpointer user_data)
+{
+ CanReachData *data = user_data;
+
+ g_network_monitor_can_reach_async (data->monitor,
+ G_SOCKET_CONNECTABLE (data->sockaddr),
+ NULL,
+ reach_cb,
+ data);
+ return G_SOURCE_REMOVE;
+}
+