Allow servers to disown their sockets. Allows for closing after a fork()

without unlinking the socket in the filesystem.


SVN revision: 19636
This commit is contained in:
rbdpngn 2006-01-08 07:42:56 +00:00 committed by rbdpngn
parent 6249f12f2f
commit ea0749e88a
4 changed files with 42 additions and 0 deletions

View File

@ -151,6 +151,7 @@ extern "C" {
EAPI int ecore_con_server_connected_get(Ecore_Con_Server *svr);
EAPI int ecore_con_server_send(Ecore_Con_Server *svr, void *data, int size);
EAPI void ecore_con_server_client_limit_set(Ecore_Con_Server *svr, int client_limit, char reject_excess_clients);
EAPI void ecore_con_server_disown(Ecore_Con_Server *svr);
EAPI int ecore_con_client_send(Ecore_Con_Client *cl, void *data, int size);
EAPI Ecore_Con_Server *ecore_con_client_server_get(Ecore_Con_Client *cl);

View File

@ -605,6 +605,26 @@ ecore_con_server_client_limit_set(Ecore_Con_Server *svr, int client_limit, char
svr->reject_excess_clients = reject_excess_clients;
}
/**
* Flag the server as not owned by this process, important to use after
* forking so child processes do not remove a parents socket path.
* Beware that if you set this in the parent, stale sockets may be left
* around.
* @param svr The given server.
* @ingroup Ecore_Con_Server_Group
*/
void
ecore_con_server_disown(Ecore_Con_Server *svr)
{
if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER))
{
ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER,
"ecore_con_server_client_limit_set");
return;
}
svr->created = 0;
}
/**
* @defgroup Ecore_Con_Client_Group Ecore Connection Client Functions
*

View File

@ -297,6 +297,7 @@ EAPI unsigned long long _ecore_ipc_swap_64(unsigned long long v);
/* FIXME: this needs to become an ipc message */
EAPI int ecore_ipc_server_send(Ecore_Ipc_Server *svr, int major, int minor, int ref, int ref_to, int response, void *data, int size);
EAPI void ecore_ipc_server_client_limit_set(Ecore_Ipc_Server *svr, int client_limit, char reject_excess_clients);
EAPI void ecore_ipc_server_disown(Ecore_Ipc_Server *svr);
/* FIXME: this needs to become an ipc message */
EAPI int ecore_ipc_client_send(Ecore_Ipc_Client *cl, int major, int minor, int ref, int ref_to, int response, void *data, int size);

View File

@ -600,6 +600,26 @@ ecore_ipc_server_client_limit_set(Ecore_Ipc_Server *svr, int client_limit, char
ecore_con_server_client_limit_set(svr->server, client_limit, reject_excess_clients);
}
/**
* Flag the server as not owned by this process, important to use after
* forking so child processes do not remove a parents socket path.
* Beware that if you set this in the parent, stale sockets may be left
* around.
* @param svr The given server.
* @ingroup Ecore_Ipc_Server_Group
*/
void
ecore_ipc_server_disown(Ecore_Ipc_Server *svr)
{
if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_IPC_SERVER))
{
ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_IPC_SERVER,
"ecore_ipc_server_client_limit_set");
return;
}
ecore_con_server_disown(svr->server);
}
#define CLENC(_member) \
d = _ecore_ipc_dlt_int(msg._member, cl->prev.o._member, &md); \
if (md >= DLT_SET) \