Unix

## Unix Unix — Unix socket |

## Synopsis

    #include <gnet.h>

                        GUnixSocket;
    GUnixSocket*        gnet_unix_socket_new                (const gchar *path);
    GUnixSocket*        gnet_unix_socket_new_abstract       (const gchar *path);
    void                gnet_unix_socket_delete             (GUnixSocket *socket);
    void                gnet_unix_socket_ref                (GUnixSocket *socket);
    void                gnet_unix_socket_unref              (GUnixSocket *socket);
    GIOChannel*         gnet_unix_socket_get_io_channel     (GUnixSocket *socket);
    gchar*              gnet_unix_socket_get_path           (const GUnixSocket *socket);
    GUnixSocket*        gnet_unix_socket_server_new         (const gchar *path);
    GUnixSocket*        gnet_unix_socket_server_new_abstract
                                                            (const gchar *path);
    GUnixSocket*        gnet_unix_socket_server_accept      (const GUnixSocket *socket);
    GUnixSocket*        gnet_unix_socket_server_accept_nonblock
                                                            (const GUnixSocket *socket);

## Description

The Unix module provides support for Unix sockets. Unix sockets are used to communicate between processes. Unix sockets are for Unix operating systems only and are not supported in Windows. GNet's Unix sockets are stream-based (like TCP), not datagram-based (like UDP). Unix socket addresses are file names, like "/tmp/my_unix_socket".

To connect to a existing Unix socket, call `gnet_unix_socket_new()`. To create a new Unix socket other processes will connect to, call `gnet_unix_socket_server_new()`.

The functions in this module are similar to those in the TCP module. See the documentation on TCP sockets for more information.

## Details

### GUnixSocket

    typedef struct _GUnixSocket GUnixSocket;

A GUnixSocket structure represents a Unix socket. The implementation is hidden.

### gnet_unix_socket_new ()

    GUnixSocket*        gnet_unix_socket_new                (const gchar *path);

Creates a GUnixSocket and connects to `path`. This function will block to connect. Use this constructor to create a GUnixSocket for a client.

`path` : | path
Returns : | a new GUnixSocket; NULL on failure.

### gnet_unix_socket_new_abstract ()

    GUnixSocket*        gnet_unix_socket_new_abstract       (const gchar *path);

Creates a GUnixSocket and connects to `path` in the abstract unix socket domain. This function will block to connect. Use this constructor to create a GUnixSocket for a client.

If the abstract unix sockets are not available on the platform in use, this function will behave like `gnet_unix_socket_new()`.

`path` : | path
Returns : | a new GUnixSocket, or NULL on failure.

Since 2.0.8

### gnet_unix_socket_delete ()

    void                gnet_unix_socket_delete             (GUnixSocket *socket);

Deletes a GUnixSocket.

`socket` : | a GUnixSocket

### gnet_unix_socket_ref ()

    void                gnet_unix_socket_ref                (GUnixSocket *socket);

Adds a reference to a GUnixSocket.

`socket` : | a GUnixSocket

### gnet_unix_socket_unref ()

    void                gnet_unix_socket_unref              (GUnixSocket *socket);

Removes a reference from a GUnixSocket. A GUnixSocket is deleted when the reference count reaches 0.

`socket` : | a GUnixSocket

### gnet_unix_socket_get_io_channel ()

    GIOChannel*         gnet_unix_socket_get_io_channel     (GUnixSocket *socket);

Gets the GIOChannel of a GUnixSocket.

For a client socket, the GIOChannel represents the data stream. Use it like you would any other GIOChannel.

For a server socket, however, the GIOChannel represents the listening socket. When it's readable, there's a connection waiting to be accepted.

Every GUnixSocket has one and only one GIOChannel. If you ref the channel, then you must unref it eventually. Do not close the channel. The channel is closed by GNet when the socket is deleted.

`socket` : | a GUnixSocket
Returns : | a GIOChannel.

### gnet_unix_socket_get_path ()

    gchar*              gnet_unix_socket_get_path           (const GUnixSocket *socket);

Gets the path of a GUnixSocket.

`socket` : | a GUnixSocket
Returns : | the path.

### gnet_unix_socket_server_new ()

    GUnixSocket*        gnet_unix_socket_server_new         (const gchar *path);

Creates a GUnixSocket bound to `path`. Use this constructor to create a GUnixSocket for a server.

`path` : | path
Returns : | a new GUnixSocket; NULL on error.

### gnet_unix_socket_server_new_abstract ()

    GUnixSocket*        gnet_unix_socket_server_new_abstract
                                                            (const gchar *path);

Creates a GUnixSocket bound to `path` in the abstract unix socket domain. Use this constructor to create a GUnixSocket for a server.

If the abstract unix sockets are not available on the platform in use, this function will behave the same as `gnet_unix_socket_server_new()`.

`path` : | path
Returns : | a new GUnixSocket, or NULL on error.

Since 2.0.8

### gnet_unix_socket_server_accept ()

    GUnixSocket*        gnet_unix_socket_server_accept      (const GUnixSocket *socket);

Accepts a connection from a GUnixSocket. The socket must have been created using `gnet_unix_socket_server_new()`. This function will block. Even if the socket's GIOChannel is readable, the function may still block.

`socket` : | a GUnixSocket
Returns : | a new GUnixSocket representing a new connection; NULL on error.

### gnet_unix_socket_server_accept_nonblock ()

    GUnixSocket*        gnet_unix_socket_server_accept_nonblock
                                                            (const GUnixSocket *socket);

Accepts a connection from a GUnixSocket without blocking. The socket must have been created using `gnet_unix_socket_server_new()`.

Note that if the socket's GIOChannel is readable, then there is PROBABLY a new connection. It is possible for the connection to close by the time this function is called, so it may return NULL.

`socket` : | a GUnixSocket
Returns : | a new GUnixSocket representing a new connection; NULL otherwise.