### Interface

# Gio SocketConnectable

since: 2.0

#### Description

    interface Gio.SocketConnectable : GObject.Object

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;
        }
    }

Available since: 2.0

#### Prerequisite

In order to implement SocketConnectable, your type must inherit from`GObject`.

#### Implementations

- GInetSocketAddress
- GNativeSocketAddress
- GNetworkAddress
- GNetworkService
- GProxyAddress
- GSocketAddress
- GUnixSocketAddress

#### Instance methods

###### g_socket_connectable_enumerate

Creates a `GSocketAddressEnumerator` for `connectable`.

since: 2.22

###### g_socket_connectable_proxy_enumerate

Creates a `GSocketAddressEnumerator` for `connectable` that will return a `GProxyAddress` for each of its addresses that you must connect to via a proxy.

since: 2.26

###### g_socket_connectable_to_string

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.

since: 2.48

#### Interface structure

    struct GioSocketConnectableIface {
      GTypeInterface g_iface;
      GSocketAddressEnumerator* (* enumerate) (
        GSocketConnectable* connectable
      );
      GSocketAddressEnumerator* (* proxy_enumerate) (
        GSocketConnectable* connectable
      );
      gchar* (* to_string) (
        GSocketConnectable* connectable
      );

    }

Provides an interface for returning a `GSocketAddressEnumerator` and `GProxyAddressEnumerator`.

###### Interface members

`g_iface` |
    GTypeInterface
| The parent interface.
`enumerate` |
    GSocketAddressEnumerator* (* enumerate) (
        GSocketConnectable* connectable
      )
| Creates a `GSocketAddressEnumerator`.
`proxy_enumerate` |
    GSocketAddressEnumerator* (* proxy_enumerate) (
        GSocketConnectable* connectable
      )
| Creates a `GProxyAddressEnumerator`.
`to_string` |
    gchar* (* to_string) (
        GSocketConnectable* connectable
      )
| Format the connectable’s address as a string for debugging. Implementing this is optional. (Since: 2.48)

#### Virtual methods

###### Gio.SocketConnectable.enumerate

Creates a `GSocketAddressEnumerator` for `connectable`.

since: 2.22

###### Gio.SocketConnectable.proxy_enumerate

Creates a `GSocketAddressEnumerator` for `connectable` that will return a `GProxyAddress` for each of its addresses that you must connect to via a proxy.

since: 2.26

###### Gio.SocketConnectable.to_string

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.

since: 2.48