## GSocketConnection GSocketConnection — A socket connection |

## Synopsis

    #include <gio/gio.h>

                        GSocketConnection;
    gboolean            g_socket_connection_connect         (GSocketConnection *connection,
                                                             GSocketAddress *address,
                                                             GCancellable *cancellable,
                                                             GError **error);
    void                g_socket_connection_connect_async   (GSocketConnection *connection,
                                                             GSocketAddress *address,
                                                             GCancellable *cancellable,
                                                             GAsyncReadyCallback callback,
                                                             gpointer user_data);
    gboolean            g_socket_connection_connect_finish  (GSocketConnection *connection,
                                                             GAsyncResult *result,
                                                             GError **error);

    gboolean            g_socket_connection_is_connected    (GSocketConnection *connection);
    GSocketAddress *    g_socket_connection_get_local_address
                                                            (GSocketConnection *connection,
                                                             GError **error);
    GSocketAddress *    g_socket_connection_get_remote_address
                                                            (GSocketConnection *connection,
                                                             GError **error);
    GSocket *           g_socket_connection_get_socket      (GSocketConnection *connection);

    GSocketConnection * g_socket_connection_factory_create_connection
                                                            (GSocket *socket);
    GType               g_socket_connection_factory_lookup_type
                                                            (GSocketFamily family,
                                                             GSocketType type,
                                                             gint protocol_id);
    void                g_socket_connection_factory_register_type
                                                            (GType g_type,
                                                             GSocketFamily family,
                                                             GSocketType type,
                                                             gint protocol);

## Object Hierarchy

      GObject
       +----GIOStream
             +----GSocketConnection
                   +----GTcpConnection
                   +----GUnixConnection

## Properties

      "socket"                   GSocket*              : Read / Write / Construct Only

## Description

GSocketConnection is a GIOStream for a connected socket. They can be created either by GSocketClient when connecting to a host, or by GSocketListener when accepting a new client.

The type of the GSocketConnection object returned from these calls depends on the type of the underlying socket that is in use. For instance, for a TCP/IP connection it will be a GTcpConnection.

Choosing what type of object to construct is done with the socket connection factory, and it is possible for 3rd parties to register custom socket connection types for specific combination of socket family/type/protocol using `g_socket_connection_factory_register_type()`.

## Details

### GSocketConnection

    typedef struct _GSocketConnection GSocketConnection;

A socket connection GIOStream object for connection-oriented sockets.

Since 2.22

### g_socket_connection_connect ()

    gboolean            g_socket_connection_connect         (GSocketConnection *connection,
                                                             GSocketAddress *address,
                                                             GCancellable *cancellable,
                                                             GError **error);

Connect `connection` to the specified remote address.

`connection` : | a GSocketConnection
`address` : | a GSocketAddress specifying the remote address.
`cancellable` : | a `GCancellable` or `NULL`. [allow-none]
`error` : | GError for error reporting, or `NULL` to ignore.
Returns : | `TRUE` if the connection succeeded, `FALSE` on error

Since 2.32

### g_socket_connection_connect_async ()

    void                g_socket_connection_connect_async   (GSocketConnection *connection,
                                                             GSocketAddress *address,
                                                             GCancellable *cancellable,
                                                             GAsyncReadyCallback callback,
                                                             gpointer user_data);

Asynchronously connect `connection` to the specified remote address.

This clears the "blocking" flag on `connection`'s underlying socket if it is currently set.

Use `g_socket_connection_connect_finish()` to retrieve the result.

`connection` : | a GSocketConnection
`address` : | a GSocketAddress specifying the remote address.
`cancellable` : | a `GCancellable` or `NULL`. [allow-none]
`callback` : | a GAsyncReadyCallback. [scope async]
`user_data` : | user data for the callback. [closure]

Since 2.32

### g_socket_connection_connect_finish ()

    gboolean            g_socket_connection_connect_finish  (GSocketConnection *connection,
                                                             GAsyncResult *result,
                                                             GError **error);

Gets the result of a `g_socket_connection_connect_async()` call.

`connection` : | a GSocketConnection
`result` : | the GAsyncResult
`error` : | GError for error reporting, or `NULL` to ignore.
Returns : | `TRUE` if the connection succeeded, `FALSE` on error

Since 2.32

### g_socket_connection_is_connected ()

    gboolean            g_socket_connection_is_connected    (GSocketConnection *connection);

Checks if `connection` is connected. This is equivalent to calling `g_socket_is_connected()` on `connection`'s underlying GSocket.

`connection` : | a GSocketConnection
Returns : | whether `connection` is connected

Since 2.32

### g_socket_connection_get_local_address ()

    GSocketAddress *    g_socket_connection_get_local_address
                                                            (GSocketConnection *connection,
                                                             GError **error);

Try to get the local address of a socket connection.

`connection` : | a GSocketConnection
`error` : | GError for error reporting, or `NULL` to ignore.
Returns : | a GSocketAddress or `NULL` on error. Free the returned object with `g_object_unref()`. [transfer full]

Since 2.22

### g_socket_connection_get_remote_address ()

    GSocketAddress *    g_socket_connection_get_remote_address
                                                            (GSocketConnection *connection,
                                                             GError **error);

Try to get the remote address of a socket connection.

`connection` : | a GSocketConnection
`error` : | GError for error reporting, or `NULL` to ignore.
Returns : | a GSocketAddress or `NULL` on error. Free the returned object with `g_object_unref()`. [transfer full]

Since 2.22

### g_socket_connection_get_socket ()

    GSocket *           g_socket_connection_get_socket      (GSocketConnection *connection);

Gets the underlying GSocket object of the connection. This can be useful if you want to do something unusual on it not supported by the GSocketConnection APIs.

`connection` : | a GSocketConnection
Returns : | a GSocketAddress or `NULL` on error. [transfer none]

Since 2.22

### g_socket_connection_factory_create_connection ()

    GSocketConnection * g_socket_connection_factory_create_connection
                                                            (GSocket *socket);

Creates a GSocketConnection subclass of the right type for `socket`.

`socket` : | a GSocket
Returns : | a GSocketConnection. [transfer full]

Since 2.22

### g_socket_connection_factory_lookup_type ()

    GType               g_socket_connection_factory_lookup_type
                                                            (GSocketFamily family,
                                                             GSocketType type,
                                                             gint protocol_id);

Looks up the GType to be used when creating socket connections on sockets with the specified `family`, `type` and `protocol_id`.

If no type is registered, the GSocketConnection base type is returned.

`family` : | a GSocketFamily
`type` : | a GSocketType
`protocol_id` : | a protocol id
Returns : | a GType

Since 2.22

### g_socket_connection_factory_register_type ()

    void                g_socket_connection_factory_register_type
                                                            (GType g_type,
                                                             GSocketFamily family,
                                                             GSocketType type,
                                                             gint protocol);

Looks up the GType to be used when creating socket connections on sockets with the specified `family`, `type` and `protocol`.

If no type is registered, the GSocketConnection base type is returned.

`g_type` : | a GType, inheriting from `G_TYPE_SOCKET_CONNECTION`
`family` : | a GSocketFamily
`type` : | a GSocketType
`protocol` : | a protocol id

Since 2.22

## Property Details

### The `"socket"` property

      "socket"                   GSocket*              : Read / Write / Construct Only

The underlying GSocket.

## See Also

GIOStream, GSocketClient, GSocketListener