# Server

## Name

Server -- TCP server object

## Synopsis

    struct      GServer;
    void        (*GServerFunc)                  (GServer *server,
                                                 GConn *conn,
                                                 gpointer user_data);
    GServer*    gnet_server_new                 (const GInetAddr *iface,
                                                 gint port,
                                                 GServerFunc func,
                                                 gpointer user_data);
    void        gnet_server_delete              (GServer *server);
    void        gnet_server_ref                 (GServer *server);
    void        gnet_server_unref               (GServer *server);

## Description

A GServer represents a TCP server. GServer is a thin wrapper around a TCP server socket. To create a new GServer, call gnet_server_new(). One of the arguments is a callback function that is called with a new GConn whenever a new client connects. Remember to call gnet_conn_set_callback() on the new GConn to set the GConn callback. To delete a GServer, call gnet_server_delete().

See also GConn and the echoserver-gserver example.

## Details

### >struct GServer

    struct GServer {

      GInetAddr* 	iface;
      gint		port;

      GTcpSocket* 	socket;

      guint 	ref_count;

      GServerFunc	func;
      gpointer	user_data;

    };

GServer is a high-level interface to a TCP server socket. The callback is called with a GConn whenever a new connection is made.

GInetAddr *`iface` | interface address
gint `port` | port number
GTcpSocket *`socket` | TCP server socket
guint `ref_count` | [private]
GServerFunc `func` | callback function
gpointer `user_data` | user data for callback

### >GServerFunc ()

    void        (*GServerFunc)                  (GServer *server,
                                                 GConn *conn,
                                                 gpointer user_data);

Callback for gnet_server_new(). When a client connects, this callback is called with a new connection. If the server fails, this callback is called with conn set to NULL. The callback is not called again.

server : | server
conn : | new connection (or NULL if error)
user_data : | user data specified in gnet_server_new()

### >gnet_server_new ()

    GServer*    gnet_server_new                 (const GInetAddr *iface,
                                                 gint port,
                                                 GServerFunc func,
                                                 gpointer user_data);

Creates a new GServer object representing a server. Usually, iface is set to NULL to bind to all interfaces and port is a specific number. The callback is called whenever a new connection arrives or if there is a server error. The callback is not called again after a server error.

iface : | interface to bind to (NULL for all interfaces)
port : | port to bind to (0 for an arbitrary port)
func : | callback to call when a connection is accepted
user_data : | data to pass to callback
Returns : | a new GServer.

### >gnet_server_delete ()

    void        gnet_server_delete              (GServer *server);

Closes and deletes a GServer.

server : | GServer to delete.

### >gnet_server_ref ()

    void        gnet_server_ref                 (GServer *server);

Adds a reference to a GServer.

server : | a GServer

### >gnet_server_unref ()

    void        gnet_server_unref               (GServer *server);

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

server : | a GServer