| Top |
GSocketConnectable is implemented by GInetSocketAddress, GNativeSocketAddress, 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
gchar *
g_socket_connectable_to_string (GSocketConnectable *connectable);
Format a GSocketConnectable as a string. This is a human-readable format for use in debugging output, and is not a stable serialization format. It is not suitable for use in user interfaces as it exposes too much information for a user.
If the GSocketConnectable implementation does not support string formatting, the implementation’s type name will be returned as a fallback.
Since: 2.48
typedef struct _GSocketConnectable GSocketConnectable;
Interface for objects that contain or generate GSocketAddresses.
struct GSocketConnectableIface {
GTypeInterface g_iface;
/* Virtual Table */
GSocketAddressEnumerator * (* enumerate) (GSocketConnectable *connectable);
GSocketAddressEnumerator * (* proxy_enumerate) (GSocketConnectable *connectable);
gchar * (* to_string) (GSocketConnectable *connectable);
};
Provides an interface for returning a GSocketAddressEnumerator and GProxyAddressEnumerator
Creates a GSocketAddressEnumerator |
||
Creates a GProxyAddressEnumerator |
||
Format the connectable’s address as a string for debugging. Implementing this is optional. (Since: 2.48) |