Functions
Ecore Connection Server Functions

This group of functions is applied to an Ecore_Con_Server object. More...

Functions

EAPI Ecore_Con_Server * ecore_con_server_add (Ecore_Con_Type type, const char *name, int port, const void *data)
 Create a server to listen for connections. More...
 
static EOLIAN Eo_efl_network_server_eo_base_constructor (Ecore_Con_Server *obj, Efl_Network_Server_Data *svr)
 
static EOLIAN Eo_efl_network_server_eo_base_finalize (Ecore_Con_Server *obj, Efl_Network_Server_Data *svr)
 
EAPI Ecore_Con_Server * ecore_con_server_connect (Ecore_Con_Type type, const char *name, int port, const void *data)
 Create a connection to the specified server and return an associated object. More...
 
static EOLIAN Eo_efl_network_connector_eo_base_finalize (Ecore_Con_Server *obj, void *pd)
 
EAPI void ecore_con_server_timeout_set (Ecore_Con_Server *svr, double timeout)
 Set the default time after which an inactive client will be disconnected. More...
 
static EOLIAN void _efl_network_server_efl_network_timeout_set (Eo *obj, Efl_Network_Server_Data *svr, double timeout)
 
EAPI double ecore_con_server_timeout_get (const Ecore_Con_Server *svr)
 Get the default time after which an inactive client will be disconnected. More...
 
static EOLIAN double _efl_network_server_efl_network_timeout_get (Eo *obj, Efl_Network_Server_Data *svr)
 
EAPI void * ecore_con_server_del (Ecore_Con_Server *svr)
 Close the connection and free the given server. More...
 
EAPI void * ecore_con_server_data_get (Ecore_Con_Server *svr)
 Retrieve the data associated with the given server. More...
 
EAPI void * ecore_con_server_data_set (Ecore_Con_Server *svr, void *data)
 Set the data associated with the given server. More...
 
EAPI Eina_Bool ecore_con_server_connected_get (const Ecore_Con_Server *svr)
 Retrieve whether the given server is currently connected. More...
 
static EOLIAN Eina_Bool _efl_network_server_efl_network_connected_get (Eo *obj, Efl_Network_Server_Data *svr)
 
static EOLIAN const Eina_List_efl_network_server_clients_get (Eo *obj, Efl_Network_Server_Data *svr)
 
static EOLIAN void _efl_network_server_connection_type_set (Eo *obj, Efl_Network_Server_Data *svr, Ecore_Con_Type type)
 
static EOLIAN Ecore_Con_Type _efl_network_server_connection_type_get (Eo *obj, Efl_Network_Server_Data *svr)
 
static EOLIAN void _efl_network_server_name_set (Eo *obj, Efl_Network_Server_Data *svr, const char *name)
 
static EOLIAN const char * _efl_network_server_name_get (Eo *obj, Efl_Network_Server_Data *svr)
 
EAPI int ecore_con_server_port_get (const Ecore_Con_Server *svr)
 Retrieve the server port in use. More...
 
static EOLIAN void _efl_network_server_efl_network_port_set (Eo *obj, Efl_Network_Server_Data *svr, int port)
 
static EOLIAN int _efl_network_server_efl_network_port_get (Eo *obj, Efl_Network_Server_Data *svr)
 
EAPI int ecore_con_server_send (Ecore_Con_Server *svr, const void *data, int size)
 Send the given data to the given server. More...
 
static EOLIAN int _efl_network_server_efl_network_send (Eo *obj, Efl_Network_Server_Data *svr, const void *data, int size)
 
static EOLIAN void _efl_network_server_client_limit_set (Eo *obj, Efl_Network_Server_Data *svr, int client_limit, char reject_excess_clients)
 
static EOLIAN void _efl_network_server_client_limit_get (Eo *obj, Efl_Network_Server_Data *svr, int *client_limit, char *reject_excess_clients)
 
EAPI const char * ecore_con_server_ip_get (const Ecore_Con_Server *svr)
 Get the IP address of a server that has been connected to. More...
 
static EOLIAN const char * _efl_network_server_efl_network_ip_get (Eo *obj, Efl_Network_Server_Data *svr)
 
EAPI double ecore_con_server_uptime_get (const Ecore_Con_Server *svr)
 Check how long a server has been connected. More...
 
static EOLIAN double _efl_network_server_efl_network_uptime_get (Eo *obj, Efl_Network_Server_Data *svr)
 
EAPI void ecore_con_server_flush (Ecore_Con_Server *svr)
 Flush all pending data to the given server. More...
 
static EOLIAN void _efl_network_server_efl_network_flush (Eo *obj, Efl_Network_Server_Data *svr)
 
EAPI void ecore_con_server_client_limit_set (Ecore_Con_Server *svr, int client_limit, char reject_excess_clients)
 Set a limit on the number of clients that can be handled concurrently by the given server, and a policy on what to do if excess clients try to connect. More...
 
EAPI int ecore_con_server_fd_get (const Ecore_Con_Server *svr)
 Get the fd that the server is connected to. More...
 
EAPI int ecore_con_client_fd_get (const Ecore_Con_Client *cl)
 Get the fd that the client is connected to. More...
 

Detailed Description

This group of functions is applied to an Ecore_Con_Server object.

Functions that operate on Ecore server objects.

It doesn't mean that they should be used in the server application, but on the server object. In fact, most of them should be used in the client application, when retrieving information or sending data.

Setting up a server is very simple: you just need to start it with ecore_con_server_add() and setup some callbacks to the events ECORE_CON_EVENT_CLIENT_ADD, ECORE_CON_EVENT_CLIENT_DEL and ECORE_CON_EVENT_CLIENT_DATA, that will be called when a client is communicating with the server:

if (!(svr = ecore_con_server_add(ECORE_CON_REMOTE_TCP, "127.0.0.1", 8080, NULL)))
exit(1);

The function ecore_con_server_connect() can be used to write a client that connects to a server. The resulting code will be very similar to the server code:

if (!(svr = ecore_con_server_connect(ECORE_CON_REMOTE_TCP, "127.0.0.1", 8080, NULL)))
exit(1);

After these two pieces of code are executed, respectively, in the server and client code, the server will be up and running and the client will try to connect to it. The connection, with its subsequent messages being sent from server to client and client to server, can be represented in the following sequence diagram:

Full size

Please notice the important difference between these two codes: the first is used for writing a server, while the second should be used for writing a client.

A reference for the client functions can be found at Ecore Connection Client Functions.

Examples of usage for this API can be found here:

Function Documentation

◆ ecore_con_server_add()

EAPI Ecore_Con_Server * ecore_con_server_add ( Ecore_Con_Type  type,
const char *  name,
int  port,
const void *  data 
)

Create a server to listen for connections.

Parameters
typeThe connection type.
nameName to associate with the socket. It is used when generating the socket name of a Unix socket, or for determining what host to listen on for TCP sockets. NULL will not be accepted.
portNumber to identify socket. When a Unix socket is used, it becomes part of the socket name. When a TCP socket is used, it is used as the TCP port.
dataData to associate with the created Ecore_Con_Server object.
Returns
A new Ecore_Con_Server.

The socket on which the server listens depends on the connection type:

  • If type is ECORE_CON_LOCAL_USER, the server will listen on the Unix socket. The path to the socket is taken from XDG_RUNTIME_DIR, if that is not set, then from HOME, even if this is not set, then from TMPDIR. If none is set, then path would be /tmp. From this path socket would be created as "[path]/.ecore/[name]/[port]". If port is negetive, then "[path]/.ecore/[name]".
  • If type is ECORE_CON_LOCAL_SYSTEM, the server will listen on Unix socket "/tmp/.ecore_service|[name]|[port]". If port is negetive, then "/tmp/.ecore_service|[name]".
  • If type is ECORE_CON_LOCAL_ABSTRACT, then port number is not considered while creating the socket.
  • If type is ECORE_CON_REMOTE_TCP, the server will listen on TCP port port.

More information about the type can be found at _Ecore_Con_Type.

The data parameter can be fetched later using ecore_con_server_data_get() or changed with ecore_con_server_data_set().

Examples:
ecore_con_server_example.c, and ecore_con_server_simple_example.c.

References eo_add.

◆ ecore_con_server_connect()

EAPI Ecore_Con_Server * ecore_con_server_connect ( Ecore_Con_Type  type,
const char *  name,
int  port,
const void *  data 
)

Create a connection to the specified server and return an associated object.

Parameters
typeThe connection type.
nameName used when determining what socket to connect to. It is used to generate the socket name when the socket is a Unix socket. It is used as the hostname when connecting with a TCP socket.
portNumber to identify the socket to connect to. Used when generating the socket name for a Unix socket, or as the TCP port when connecting to a TCP socket.
dataData to associate with the created Ecore_Con_Server object.
Returns
A new Ecore_Con_Server.

The socket to which the connection is made depends on the connection type:

  • If type is ECORE_CON_LOCAL_USER, the server will conect to the Unix socket. The path to the socket is taken from XDG_RUNTIME_DIR, if that is not set, then from HOME, even if this is not set, then from TMPDIR. If none is set, then path would be /tmp. From this path the function would connect to socket at "[path]/.ecore/[name]/[port]". If port is negetive, then to socket at "[path]/.ecore/[name]".
  • If type is ECORE_CON_LOCAL_SYSTEM, the server will connect to Unix socket at "/tmp/.ecore_service|[name]|[port]". If port is negetive, then to Unix socket at "/tmp/.ecore_service|[name]".
  • If type is ECORE_CON_LOCAL_ABSTRACT, then port number is not considered while connecting to socket.
  • If type is ECORE_CON_REMOTE_TCP, the server will listen on TCP port port.

More information about the type can be found at _Ecore_Con_Type.

This function won't block. It will either succeed, or fail due to invalid parameters, failed memory allocation, etc., returning NULL on that case.

However, even if this call returns a valid Ecore_Con_Server, the connection will only be successfully completed if an event of type ECORE_CON_EVENT_SERVER_ADD is received. If it fails to complete, an ECORE_CON_EVENT_SERVER_DEL will be received.

The created object gets deleted automatically if the connection to the server is lost.

The data parameter can be fetched later using ecore_con_server_data_get() or changed with ecore_con_server_data_set().

Examples:
ecore_con_client_example.c, and ecore_con_client_simple_example.c.

References eo_add.

◆ ecore_con_server_timeout_set()

EAPI void ecore_con_server_timeout_set ( Ecore_Con_Server *  svr,
double  timeout 
)

Set the default time after which an inactive client will be disconnected.

Parameters
svrThe server object
timeoutThe timeout, in seconds, to disconnect after

This function is used by the server to set the default idle timeout on clients. If the any of the clients becomes idle for a time higher than this value, it will be disconnected. A value of < 1 disables the idle timeout.

This timeout is not affected by the one set by ecore_con_client_timeout_set(). A client will be disconnected whenever the client or the server timeout is reached. That means, the lower timeout value will be used for that client if ecore_con_client_timeout_set() is used on it.

See also
ecore_con_server_timeout_get()
ecore_con_client_timeout_set()
Examples:
ecore_con_server_simple_example.c.

◆ ecore_con_server_timeout_get()

EAPI double ecore_con_server_timeout_get ( const Ecore_Con_Server *  svr)

Get the default time after which an inactive client will be disconnected.

Parameters
svrThe server object
Returns
The timeout, in seconds, to disconnect after

This function is used to get the idle timeout for clients. A value of < 1 means the idle timeout is disabled.

See also
ecore_con_server_timeout_set()
ecore_con_client_timeout_get()

◆ ecore_con_server_del()

EAPI void * ecore_con_server_del ( Ecore_Con_Server *  svr)

Close the connection and free the given server.

Parameters
svrThe given server.
Returns
Data associated with the server when it was created.

All the clients connected to this server will be disconnected.

See also
ecore_con_server_add, ecore_con_server_connect
Examples:
ecore_con_client_simple_example.c.

References eo_data_scope_get().

Referenced by ecore_ipc_server_del().

◆ ecore_con_server_data_get()

EAPI void * ecore_con_server_data_get ( Ecore_Con_Server *  svr)

Retrieve the data associated with the given server.

Parameters
svrThe given server.
Returns
The associated data.
See also
ecore_con_server_data_set()
Examples:
ecore_con_client_simple_example.c.

References eo_data_scope_get().

Referenced by ecore_ipc_ssl_available_get().

◆ ecore_con_server_data_set()

EAPI void * ecore_con_server_data_set ( Ecore_Con_Server *  svr,
void *  data 
)

Set the data associated with the given server.

Parameters
svrThe given server.
dataThe data to associate with svr
Returns
The previously associated data, if any.
See also
ecore_con_server_data_get()
Examples:
ecore_con_client_simple_example.c.

References eo_data_scope_get().

◆ ecore_con_server_connected_get()

EAPI Eina_Bool ecore_con_server_connected_get ( const Ecore_Con_Server *  svr)

Retrieve whether the given server is currently connected.

Parameters
svrThe given server.
Returns
EINA_TRUE if the server is connected, EINA_FALSE otherwise.
Examples:
ecore_con_client_simple_example.c.

Referenced by ecore_ipc_server_connected_get().

◆ ecore_con_server_port_get()

EAPI int ecore_con_server_port_get ( const Ecore_Con_Server *  svr)

Retrieve the server port in use.

Parameters
svrThe given server.
Returns
The server port in use.

The port where the server is listening for connections.

Examples:
ecore_con_client_simple_example.c.

◆ ecore_con_server_send()

EAPI int ecore_con_server_send ( Ecore_Con_Server *  svr,
const void *  data,
int  size 
)

Send the given data to the given server.

Parameters
svrThe given server.
dataThe given data.
sizeLength of the data, in bytes, to send.
Returns
The number of bytes sent. 0 will be returned if there is an error.

This function will send the given data to the server as soon as the program is back to the main loop. Thus, this function returns immediately (non-blocking). If the data needs to be sent now, call ecore_con_server_flush() after this one.

See also
ecore_con_client_send()
ecore_con_server_flush()
Examples:
ecore_con_client_example.c, and ecore_con_client_simple_example.c.

Referenced by ecore_ipc_server_send().

◆ ecore_con_server_ip_get()

EAPI const char * ecore_con_server_ip_get ( const Ecore_Con_Server *  svr)

Get the IP address of a server that has been connected to.

Parameters
svrThe given server.
Returns
A pointer to an internal string that contains the IP address of the connected server in the form "XXX.YYY.ZZZ.AAA" IP notation. This string should not be modified or trusted to stay valid after deletion for the svr object. If no IP is known NULL is returned.
Examples:
ecore_con_client_example.c, and ecore_con_client_simple_example.c.

Referenced by ecore_ipc_server_ip_get().

◆ ecore_con_server_uptime_get()

EAPI double ecore_con_server_uptime_get ( const Ecore_Con_Server *  svr)

Check how long a server has been connected.

Parameters
svrThe server to check
Returns
The total time, in seconds, that the server has been connected/running

This function is used to find out the time that has been elapsed since ecore_con_server_add() succeeded.

Examples:
ecore_con_server_simple_example.c.

◆ ecore_con_server_flush()

EAPI void ecore_con_server_flush ( Ecore_Con_Server *  svr)

Flush all pending data to the given server.

Parameters
svrThe given server.

This function will block until all data is sent to the server.

See also
ecore_con_server_send()
ecore_con_client_flush()
Examples:
ecore_con_client_example.c, and ecore_con_client_simple_example.c.

Referenced by ecore_ipc_server_flush().

◆ ecore_con_server_client_limit_set()

EAPI void ecore_con_server_client_limit_set ( Ecore_Con_Server *  svr,
int  client_limit,
char  reject_excess_clients 
)

Set a limit on the number of clients that can be handled concurrently by the given server, and a policy on what to do if excess clients try to connect.

Parameters
svrThe given server.
client_limitThe maximum number of clients to handle concurrently. -1 means unlimited (default). 0 effectively disables the server.
reject_excess_clientsSet to 1 to automatically disconnect excess clients as soon as they connect if you are already handling client_limit clients. Set to 0 (default) to just hold off on the "accept()" system call until the number of active clients drops. This causes the kernel to queue up to 4096 connections (or your kernel's limit, whichever is lower).

Beware that if you set this once ecore is already running, you may already have pending CLIENT_ADD events in your event queue. Those clients have already connected and will not be affected by this call. Only clients subsequently trying to connect will be affected.

Examples:
ecore_con_server_simple_example.c.

Referenced by ecore_ipc_server_client_limit_set().

◆ ecore_con_server_fd_get()

EAPI int ecore_con_server_fd_get ( const Ecore_Con_Server *  svr)

Get the fd that the server is connected to.

Parameters
svrThe server object
Returns
The fd, or -1 on failure

This function returns the fd which is used by the underlying server connection. It should not be tampered with unless you REALLY know what you are doing.

Note
This function is only valid for servers created with ecore_con_server_connect()
Warning
Seriously. Don't use this unless you know what you are doing.
Since
1.1

◆ ecore_con_client_fd_get()

EAPI int ecore_con_client_fd_get ( const Ecore_Con_Client *  cl)

Get the fd that the client is connected to.

Parameters
clThe client object
Returns
The fd, or -1 on failure

This function returns the fd which is used by the underlying client connection. It should not be tampered with unless you REALLY know what you are doing.

Since
1.1

References ECORE_CON_EVENT_PROXY_BIND, and eo_data_scope_get().