module Gio::SocketConnectable
Overview
Objects that describe one or more potential socket endpoints
implement GSocketConnectable
. Callers can then use
Gio::SocketConnectable#enumerate
to get a
Gio::SocketAddressEnumerator
to try out each socket address in turn
until one succeeds, as shown in the sample code below.
WARNING ⚠️ The following code is in c ⚠️
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;
}
}
Direct including types
- Gio::InetSocketAddress
- Gio::NativeSocketAddress
- Gio::NetworkAddress
- Gio::NetworkService
- Gio::ProxyAddress
- Gio::SocketAddress
- Gio::UnixSocketAddress
Defined in:
lib/gi-crystal/src/auto/gio-2.0/socket_connectable.crConstructors
-
.cast(obj : GObject::Object) : self
Cast a
GObject::Object
toself
, throws aTypeCastError
if the cast can't be made.
Class Method Summary
Instance Method Summary
- #enumerate : Gio::SocketAddressEnumerator
- #proxy_enumerate : Gio::SocketAddressEnumerator
- #to_string : String
- #to_unsafe