| Top |
| GSocketConnectable * | connectable | Read / Write / Construct Only |
| guint | default-port | Read / Write / Construct Only |
| GProxyResolver * | proxy-resolver | Read / Write / Construct |
| gchar * | uri | Read / Write / Construct Only |
GInterface
╰── GSocketConnectable
GObject
├── GSocketAddressEnumerator
│ ╰── GProxyAddressEnumerator
╰── GSocketAddressEnumerator
╰── GProxyAddressEnumerator
GSocketConnectable is implemented by GInetSocketAddress, GNetworkAddress, GNetworkService, GProxyAddress, 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.
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 (hostname, port);
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 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;
}
}
GSocketAddressEnumerator *
g_socket_connectable_enumerate (GSocketConnectable *connectable);
Creates a GSocketAddressEnumerator for connectable
.
Since 2.22
GSocketAddressEnumerator *
g_socket_connectable_proxy_enumerate (GSocketConnectable *connectable);
Creates a GSocketAddressEnumerator for connectable
that will
return GProxyAddresses for addresses that you must connect
to via a proxy.
If connectable
does not implement
g_socket_connectable_proxy_enumerate(), this will fall back to
calling g_socket_connectable_enumerate().
Since 2.26
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.
enumerator |
||
cancellable |
optional GCancellable object, |
[allow-none] |
error |
a GError. |
a GSocketAddress (owned by the caller), or NULL on
error (in which case *error
will be set) or if there are no
more addresses.
[transfer full]
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.
enumerator |
||
cancellable |
optional GCancellable object, |
[allow-none] |
callback |
a GAsyncReadyCallback to call when the request is satisfied. |
[scope async] |
user_data |
the data to pass to callback function. |
[closure] |
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 GSocketAddress (owned by the caller), or NULL on
error (in which case *error
will be set) or if there are no
more addresses.
[transfer full]
typedef struct _GSocketConnectable GSocketConnectable;
Interface for objects that contain or generate GSocketAddress<!-- -->es.
struct GSocketConnectableIface {
GTypeInterface g_iface;
/* Virtual Table */
GSocketAddressEnumerator * (* enumerate) (GSocketConnectable *connectable);
GSocketAddressEnumerator * (* proxy_enumerate) (GSocketConnectable *connectable);
};
Provides an interface for returning a GSocketAddressEnumerator and GProxyAddressEnumerator
GTypeInterface |
The parent interface. |
|
Creates a GSocketAddressEnumerator |
||
Creates a GProxyAddressEnumerator |
typedef struct _GSocketAddressEnumerator GSocketAddressEnumerator;
Enumerator type for objects that contain or generate GSocketAddress<!-- -->es.
typedef struct _GProxyAddressEnumerator GProxyAddressEnumerator;
A subclass of GSocketAddressEnumerator that takes another address enumerator and wraps its results in GProxyAddress<!-- -->es as directed by the default GProxyResolver.
“connectable” property“connectable” GSocketConnectable *
The connectable being enumerated.
Flags: Read / Write / Construct Only
“default-port” property“default-port” guint
The default port to use if “uri” does not specify one.
Flags: Read / Write / Construct Only
Allowed values: <= 65535
Default value: 0
Since 2.38
“proxy-resolver” property“proxy-resolver” GProxyResolver *
The proxy resolver to use.
Flags: Read / Write / Construct
Since 2.36
“uri” property“uri” gchar *
The destination URI, use none:// for generic socket.
Flags: Read / Write / Construct Only
Default value: NULL