GIO Reference Manual | ||||
---|---|---|---|---|
Top | Description | Object Hierarchy | Prerequisites | Known Implementations |
GSocketConnectable; GSocketConnectableIface; GSocketAddressEnumerator * g_socket_connectable_enumerate (GSocketConnectable *connectable
); GSocketAddressEnumerator; GSocketAddress * g_socket_address_enumerator_next (GSocketAddressEnumerator *enumerator
,GCancellable *cancellable
,GError **error
); void g_socket_address_enumerator_next_async (GSocketAddressEnumerator *enumerator
,GCancellable *cancellable
,GAsyncReadyCallback callback
,gpointer user_data
); GSocketAddress * g_socket_address_enumerator_next_finish (GSocketAddressEnumerator *enumerator
,GAsyncResult *result
,GError **error
);
GSocketConnectable is implemented by GInetSocketAddress, GNetworkAddress, GNetworkService, GSocketAddress and GUnixSocketAddress.
Objects that describe one or more potential socket endpoints
implement GSocketConnectable. Callers can then use
g_socket_connectable_enumerate()
to get a GSocketAddressEnumerator
to try out each socket address in turn until one succeeds, as shown
in the sample code below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
MyConnectionType * connect_to_host (const char *hostname, guint16 port, GCancellable *cancellable, GError **error) { MyConnection *conn = NULL; GSocketConnectable *addr; GSocketAddressEnumerator *enumerator; GSocketAddress *sockaddr; GError *conn_error = NULL; addr = g_network_address_new ("www.gnome.org", 80); enumerator = g_socket_connectable_enumerate (addr); g_object_unref (addr); /* Try each sockaddr until we succeed. Record the first * connection error, but not any further ones (since they'll probably * be basically the same as the first). */ while (!conn && (sockaddr = g_socket_address_enumerator_next (enumerator, cancellable, error)) { conn = connect_to_sockaddr (sockaddr, conn_error ? NULL : &conn_error); g_object_unref (sockaddr); } g_object_unref (enumerator); if (conn) { if (conn_error) { /* We couldn't connect to the first address, but we succeeded * in connecting to a later address. */ g_error_free (conn_error); } return conn; } else if (error) { /* Either the initial lookup failed, or else the caller * cancelled us. */ if (conn_error) g_error_free (conn_error); return NULL; } else { g_error_propagate (error, conn_error); return NULL; } } |
typedef struct _GSocketConnectable GSocketConnectable;
Interface for objects that contain or generate GSocketAddresses.
typedef struct { GTypeInterface g_iface; /* Virtual Table */ GSocketAddressEnumerator * (* enumerate) (GSocketConnectable *connectable); } GSocketConnectableIface;
Provides an interface for returning a GSocketAddressEnumerator
GTypeInterface |
The parent interface. |
Creates a GSocketAddressEnumerator |
GSocketAddressEnumerator * g_socket_connectable_enumerate
(GSocketConnectable *connectable
);
Creates a GSocketAddressEnumerator for connectable
.
|
a GSocketConnectable |
Returns : |
a new GSocketAddressEnumerator. |
Since 2.22
typedef struct _GSocketAddressEnumerator GSocketAddressEnumerator;
Enumerator type for objects that contain or generate GSocketAddresses.
GSocketAddress * g_socket_address_enumerator_next (GSocketAddressEnumerator *enumerator
,GCancellable *cancellable
,GError **error
);
Retrieves the next GSocketAddress from enumerator
. Note that this
may block for some amount of time. (Eg, a GNetworkAddress may need
to do a DNS lookup before it can return an address.) Use
g_socket_address_enumerator_next_async()
if you need to avoid
blocking.
If enumerator
is expected to yield addresses, but for some reason
is unable to (eg, because of a DNS error), then the first call to
g_socket_address_enumerator_next()
will return an appropriate error
in *error
. However, if the first call to
g_socket_address_enumerator_next()
succeeds, then any further
internal errors (other than cancellable
being triggered) will be
ignored.
|
a GSocketAddressEnumerator |
|
optional GCancellable object, NULL to ignore.
|
|
a GError. |
Returns : |
a GSocketAddress (owned by the caller), or NULL on
error (in which case *error will be set) or if there are no
more addresses.
|
void g_socket_address_enumerator_next_async (GSocketAddressEnumerator *enumerator
,GCancellable *cancellable
,GAsyncReadyCallback callback
,gpointer user_data
);
Asynchronously retrieves the next GSocketAddress from enumerator
and then calls callback
, which must call
g_socket_address_enumerator_next_finish()
to get the result.
|
a GSocketAddressEnumerator |
|
optional GCancellable object, NULL to ignore.
|
|
a GAsyncReadyCallback to call when the request is satisfied |
|
the data to pass to callback function |
GSocketAddress * g_socket_address_enumerator_next_finish (GSocketAddressEnumerator *enumerator
,GAsyncResult *result
,GError **error
);
Retrieves the result of a completed call to
g_socket_address_enumerator_next_async()
. See
g_socket_address_enumerator_next()
for more information about
error handling.
|
a GSocketAddressEnumerator |
|
a GAsyncResult |
|
a GError |
Returns : |
a GSocketAddress (owned by the caller), or NULL on
error (in which case *error will be set) or if there are no
more addresses.
|