GResolver

GResolver — Asynchronous and cancellable DNS resolver

Synopsis

#include <gio/gio.h>

                    GResolver;
GResolver *         g_resolver_get_default              (void);
void                g_resolver_set_default              (GResolver *resolver);
GList *             g_resolver_lookup_by_name           (GResolver *resolver,
                                                         const gchar *hostname,
                                                         GCancellable *cancellable,
                                                         GError **error);
void                g_resolver_lookup_by_name_async     (GResolver *resolver,
                                                         const gchar *hostname,
                                                         GCancellable *cancellable,
                                                         GAsyncReadyCallback callback,
                                                         gpointer user_data);
GList *             g_resolver_lookup_by_name_finish    (GResolver *resolver,
                                                         GAsyncResult *result,
                                                         GError **error);
void                g_resolver_free_addresses           (GList *addresses);
gchar *             g_resolver_lookup_by_address        (GResolver *resolver,
                                                         GInetAddress *address,
                                                         GCancellable *cancellable,
                                                         GError **error);
void                g_resolver_lookup_by_address_async  (GResolver *resolver,
                                                         GInetAddress *address,
                                                         GCancellable *cancellable,
                                                         GAsyncReadyCallback callback,
                                                         gpointer user_data);
gchar *             g_resolver_lookup_by_address_finish (GResolver *resolver,
                                                         GAsyncResult *result,
                                                         GError **error);
GList *             g_resolver_lookup_service           (GResolver *resolver,
                                                         const gchar *service,
                                                         const gchar *protocol,
                                                         const gchar *domain,
                                                         GCancellable *cancellable,
                                                         GError **error);
void                g_resolver_lookup_service_async     (GResolver *resolver,
                                                         const gchar *service,
                                                         const gchar *protocol,
                                                         const gchar *domain,
                                                         GCancellable *cancellable,
                                                         GAsyncReadyCallback callback,
                                                         gpointer user_data);
GList *             g_resolver_lookup_service_finish    (GResolver *resolver,
                                                         GAsyncResult *result,
                                                         GError **error);
void                g_resolver_free_targets             (GList *targets);

#define             G_RESOLVER_ERROR
enum                GResolverError;

Object Hierarchy

  GObject
   +----GResolver
  GEnum
   +----GResolverError

Signals

  "reload"                                         : Run Last

Description

GResolver provides cancellable synchronous and asynchronous DNS resolution, for hostnames (g_resolver_lookup_by_address(), g_resolver_lookup_by_name() and their async variants) and SRV (service) records (g_resolver_lookup_service()).

GNetworkAddress and GNetworkService provide wrappers around GResolver functionality that also implement GSocketConnectable, making it easy to connect to a remote host/service.

Details

GResolver

typedef struct _GResolver GResolver;

The object that handles DNS resolution. Use g_resolver_get_default() to get the default resolver.


g_resolver_get_default ()

GResolver *         g_resolver_get_default              (void);

Gets the default GResolver. You should unref it when you are done with it. GResolver may use its reference count as a hint about how many threads/processes, etc it should allocate for concurrent DNS resolutions.

Returns :

the default GResolver. [transfer full]

Since 2.22


g_resolver_set_default ()

void                g_resolver_set_default              (GResolver *resolver);

Sets resolver to be the application's default resolver (reffing resolver, and unreffing the previous default resolver, if any). Future calls to g_resolver_get_default() will return this resolver.

This can be used if an application wants to perform any sort of DNS caching or "pinning"; it can implement its own GResolver that calls the original default resolver for DNS operations, and implements its own cache policies on top of that, and then set itself as the default resolver for all later code to use.

resolver :

the new default GResolver

Since 2.22


g_resolver_lookup_by_name ()

GList *             g_resolver_lookup_by_name           (GResolver *resolver,
                                                         const gchar *hostname,
                                                         GCancellable *cancellable,
                                                         GError **error);

Synchronously resolves hostname to determine its associated IP address(es). hostname may be an ASCII-only or UTF-8 hostname, or the textual form of an IP address (in which case this just becomes a wrapper around g_inet_address_new_from_string()).

On success, g_resolver_lookup_by_name() will return a GList of GInetAddress, sorted in order of preference. (That is, you should attempt to connect to the first address first, then the second if the first fails, etc.)

If the DNS resolution fails, error (if non-NULL) will be set to a value from GResolverError.

If cancellable is non-NULL, it can be used to cancel the operation, in which case error (if non-NULL) will be set to G_IO_ERROR_CANCELLED.

If you are planning to connect to a socket on the resolved IP address, it may be easier to create a GNetworkAddress and use its GSocketConnectable interface.

resolver :

a GResolver

hostname :

the hostname to look up

cancellable :

a GCancellable, or NULL. [allow-none]

error :

return location for a GError, or NULL

Returns :

a GList of GInetAddress, or NULL on error. You must unref each of the addresses and free the list when you are done with it. (You can use g_resolver_free_addresses() to do this.). [element-type GInetAddress][transfer full]

Since 2.22


g_resolver_lookup_by_name_async ()

void                g_resolver_lookup_by_name_async     (GResolver *resolver,
                                                         const gchar *hostname,
                                                         GCancellable *cancellable,
                                                         GAsyncReadyCallback callback,
                                                         gpointer user_data);

Begins asynchronously resolving hostname to determine its associated IP address(es), and eventually calls callback, which must call g_resolver_lookup_by_name_finish() to get the result. See g_resolver_lookup_by_name() for more details.

resolver :

a GResolver

hostname :

the hostname to look up the address of

cancellable :

a GCancellable, or NULL. [allow-none]

callback :

callback to call after resolution completes. [scope async]

user_data :

data for callback. [closure]

Since 2.22


g_resolver_lookup_by_name_finish ()

GList *             g_resolver_lookup_by_name_finish    (GResolver *resolver,
                                                         GAsyncResult *result,
                                                         GError **error);

Retrieves the result of a call to g_resolver_lookup_by_name_async().

If the DNS resolution failed, error (if non-NULL) will be set to a value from GResolverError. If the operation was cancelled, error will be set to G_IO_ERROR_CANCELLED.

resolver :

a GResolver

result :

the result passed to your GAsyncReadyCallback

error :

return location for a GError, or NULL

Returns :

a GList of GInetAddress, or NULL on error. See g_resolver_lookup_by_name() for more details. [element-type GInetAddress][transfer full]

Since 2.22


g_resolver_free_addresses ()

void                g_resolver_free_addresses           (GList *addresses);

Frees addresses (which should be the return value from g_resolver_lookup_by_name() or g_resolver_lookup_by_name_finish()). (This is a convenience method; you can also simply free the results by hand.)

addresses :

a GList of GInetAddress

Since 2.22


g_resolver_lookup_by_address ()

gchar *             g_resolver_lookup_by_address        (GResolver *resolver,
                                                         GInetAddress *address,
                                                         GCancellable *cancellable,
                                                         GError **error);

Synchronously reverse-resolves address to determine its associated hostname.

If the DNS resolution fails, error (if non-NULL) will be set to a value from GResolverError.

If cancellable is non-NULL, it can be used to cancel the operation, in which case error (if non-NULL) will be set to G_IO_ERROR_CANCELLED.

resolver :

a GResolver

address :

the address to reverse-resolve

cancellable :

a GCancellable, or NULL. [allow-none]

error :

return location for a GError, or NULL

Returns :

a hostname (either ASCII-only, or in ASCII-encoded form), or NULL on error.

Since 2.22


g_resolver_lookup_by_address_async ()

void                g_resolver_lookup_by_address_async  (GResolver *resolver,
                                                         GInetAddress *address,
                                                         GCancellable *cancellable,
                                                         GAsyncReadyCallback callback,
                                                         gpointer user_data);

Begins asynchronously reverse-resolving address to determine its associated hostname, and eventually calls callback, which must call g_resolver_lookup_by_address_finish() to get the final result.

resolver :

a GResolver

address :

the address to reverse-resolve

cancellable :

a GCancellable, or NULL. [allow-none]

callback :

callback to call after resolution completes. [scope async]

user_data :

data for callback. [closure]

Since 2.22


g_resolver_lookup_by_address_finish ()

gchar *             g_resolver_lookup_by_address_finish (GResolver *resolver,
                                                         GAsyncResult *result,
                                                         GError **error);

Retrieves the result of a previous call to g_resolver_lookup_by_address_async().

If the DNS resolution failed, error (if non-NULL) will be set to a value from GResolverError. If the operation was cancelled, error will be set to G_IO_ERROR_CANCELLED.

resolver :

a GResolver

result :

the result passed to your GAsyncReadyCallback

error :

return location for a GError, or NULL

Returns :

a hostname (either ASCII-only, or in ASCII-encoded form), or NULL on error.

Since 2.22


g_resolver_lookup_service ()

GList *             g_resolver_lookup_service           (GResolver *resolver,
                                                         const gchar *service,
                                                         const gchar *protocol,
                                                         const gchar *domain,
                                                         GCancellable *cancellable,
                                                         GError **error);

Synchronously performs a DNS SRV lookup for the given service and protocol in the given domain and returns an array of GSrvTarget. domain may be an ASCII-only or UTF-8 hostname. Note also that the service and protocol arguments do not include the leading underscore that appears in the actual DNS entry.

On success, g_resolver_lookup_service() will return a GList of GSrvTarget, sorted in order of preference. (That is, you should attempt to connect to the first target first, then the second if the first fails, etc.)

If the DNS resolution fails, error (if non-NULL) will be set to a value from GResolverError.

If cancellable is non-NULL, it can be used to cancel the operation, in which case error (if non-NULL) will be set to G_IO_ERROR_CANCELLED.

If you are planning to connect to the service, it is usually easier to create a GNetworkService and use its GSocketConnectable interface.

resolver :

a GResolver

service :

the service type to look up (eg, "ldap")

protocol :

the networking protocol to use for service (eg, "tcp")

domain :

the DNS domain to look up the service in

cancellable :

a GCancellable, or NULL. [allow-none]

error :

return location for a GError, or NULL

Returns :

a GList of GSrvTarget, or NULL on error. You must free each of the targets and the list when you are done with it. (You can use g_resolver_free_targets() to do this.). [element-type GSrvTarget][transfer full]

Since 2.22


g_resolver_lookup_service_async ()

void                g_resolver_lookup_service_async     (GResolver *resolver,
                                                         const gchar *service,
                                                         const gchar *protocol,
                                                         const gchar *domain,
                                                         GCancellable *cancellable,
                                                         GAsyncReadyCallback callback,
                                                         gpointer user_data);

Begins asynchronously performing a DNS SRV lookup for the given service and protocol in the given domain, and eventually calls callback, which must call g_resolver_lookup_service_finish() to get the final result. See g_resolver_lookup_service() for more details.

resolver :

a GResolver

service :

the service type to look up (eg, "ldap")

protocol :

the networking protocol to use for service (eg, "tcp")

domain :

the DNS domain to look up the service in

cancellable :

a GCancellable, or NULL. [allow-none]

callback :

callback to call after resolution completes. [scope async]

user_data :

data for callback. [closure]

Since 2.22


g_resolver_lookup_service_finish ()

GList *             g_resolver_lookup_service_finish    (GResolver *resolver,
                                                         GAsyncResult *result,
                                                         GError **error);

Retrieves the result of a previous call to g_resolver_lookup_service_async().

If the DNS resolution failed, error (if non-NULL) will be set to a value from GResolverError. If the operation was cancelled, error will be set to G_IO_ERROR_CANCELLED.

resolver :

a GResolver

result :

the result passed to your GAsyncReadyCallback

error :

return location for a GError, or NULL

Returns :

a GList of GSrvTarget, or NULL on error. See g_resolver_lookup_service() for more details. [element-type GSrvTarget][transfer full]

Since 2.22


g_resolver_free_targets ()

void                g_resolver_free_targets             (GList *targets);

Frees targets (which should be the return value from g_resolver_lookup_service() or g_resolver_lookup_service_finish()). (This is a convenience method; you can also simply free the results by hand.)

targets :

a GList of GSrvTarget

Since 2.22


G_RESOLVER_ERROR

#define G_RESOLVER_ERROR (g_resolver_error_quark ())

Error domain for GResolver. Errors in this domain will be from the GResolverError enumeration. See GError for more information on error domains.


enum GResolverError

typedef enum {
  G_RESOLVER_ERROR_NOT_FOUND,
  G_RESOLVER_ERROR_TEMPORARY_FAILURE,
  G_RESOLVER_ERROR_INTERNAL
} GResolverError;

An error code used with G_RESOLVER_ERROR in a GError returned from a GResolver routine.

G_RESOLVER_ERROR_NOT_FOUND

the requested name/address/service was not found

G_RESOLVER_ERROR_TEMPORARY_FAILURE

the requested information could not be looked up due to a network error or similar problem

G_RESOLVER_ERROR_INTERNAL

unknown error

Since 2.22

Signal Details

The "reload" signal

void                user_function                      (GResolver *resolver,
                                                        gpointer   user_data)      : Run Last

Emitted when the resolver notices that the system resolver configuration has changed.

resolver :

a GResolver

user_data :

user data set when the signal handler was connected.