add user_data in esl_listen so the main function can pass a private user_data to callback

This commit is contained in:
Seven Du 2014-02-16 08:14:44 +08:00
parent 01e3eb458e
commit 11dee76381
5 changed files with 17 additions and 15 deletions

View File

@ -45,7 +45,7 @@ static void handle_SIGCHLD(int sig)
return; return;
} }
static void my_forking_callback(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr) static void my_forking_callback(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr, void *user_data)
{ {
esl_handle_t handle = {{0}}; esl_handle_t handle = {{0}};
char path_buffer[1024] = { 0 }; char path_buffer[1024] = { 0 };
@ -91,7 +91,7 @@ static void my_forking_callback(esl_socket_t server_sock, esl_socket_t client_so
exit(0); exit(0);
} }
static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr) static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr, void *user_data)
{ {
esl_handle_t handle = {{0}}; esl_handle_t handle = {{0}};
const char *path; const char *path;
@ -162,11 +162,11 @@ int main(int argc, char *argv[])
if (thread) { if (thread) {
printf("Starting threaded listener.\n"); printf("Starting threaded listener.\n");
fflush(stdout); fflush(stdout);
esl_listen_threaded(ip, port, mycallback, 100000); esl_listen_threaded(ip, port, mycallback, NULL, 100000);
} else { } else {
printf("Starting forking listener.\n"); printf("Starting forking listener.\n");
fflush(stdout); fflush(stdout);
esl_listen(ip, port, my_forking_callback, NULL); esl_listen(ip, port, my_forking_callback, NULL, NULL);
} }
return 0; return 0;

View File

@ -645,13 +645,14 @@ struct thread_handler {
esl_socket_t server_sock; esl_socket_t server_sock;
esl_socket_t client_sock; esl_socket_t client_sock;
struct sockaddr_in addr; struct sockaddr_in addr;
void *user_data;
}; };
static void *client_thread(esl_thread_t *me, void *obj) static void *client_thread(esl_thread_t *me, void *obj)
{ {
struct thread_handler *handler = (struct thread_handler *) obj; struct thread_handler *handler = (struct thread_handler *) obj;
handler->callback(handler->server_sock, handler->client_sock, &handler->addr); handler->callback(handler->server_sock, handler->client_sock, &handler->addr, handler->user_data);
free(handler); free(handler);
return NULL; return NULL;
@ -679,7 +680,7 @@ static int prepare_sock(esl_socket_t sock)
} }
ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback, esl_socket_t *server_sockP) ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback, void *user_data, esl_socket_t *server_sockP)
{ {
esl_socket_t server_sock = ESL_SOCK_INVALID; esl_socket_t server_sock = ESL_SOCK_INVALID;
struct sockaddr_in addr; struct sockaddr_in addr;
@ -728,7 +729,7 @@ ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_list
goto end; goto end;
} }
prepare_sock(client_sock); prepare_sock(client_sock);
callback(server_sock, client_sock, &echoClntAddr); callback(server_sock, client_sock, &echoClntAddr, user_data);
} }
end: end:
@ -742,7 +743,7 @@ ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_list
} }
ESL_DECLARE(esl_status_t) esl_listen_threaded(const char *host, esl_port_t port, esl_listen_callback_t callback, int max) ESL_DECLARE(esl_status_t) esl_listen_threaded(const char *host, esl_port_t port, esl_listen_callback_t callback, void *user_data, int max)
{ {
esl_socket_t server_sock = ESL_SOCK_INVALID; esl_socket_t server_sock = ESL_SOCK_INVALID;
struct sockaddr_in addr; struct sockaddr_in addr;
@ -796,6 +797,7 @@ ESL_DECLARE(esl_status_t) esl_listen_threaded(const char *host, esl_port_t port,
handler->server_sock = server_sock; handler->server_sock = server_sock;
handler->client_sock = client_sock; handler->client_sock = client_sock;
handler->addr = echoClntAddr; handler->addr = echoClntAddr;
handler->user_data = user_data;
esl_thread_create_detached(client_thread, handler); esl_thread_create_detached(client_thread, handler);
} }

View File

@ -379,7 +379,7 @@ ESL_DECLARE(int) esl_tolower(int c);
ESL_DECLARE(int) esl_snprintf(char *buffer, size_t count, const char *fmt, ...); ESL_DECLARE(int) esl_snprintf(char *buffer, size_t count, const char *fmt, ...);
typedef void (*esl_listen_callback_t)(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr); typedef void (*esl_listen_callback_t)(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr, void *user_data);
/*! /*!
\brief Attach a handle to an established socket connection \brief Attach a handle to an established socket connection
\param handle Handle to be attached \param handle Handle to be attached
@ -394,8 +394,8 @@ ESL_DECLARE(esl_status_t) esl_attach_handle(esl_handle_t *handle, esl_socket_t s
\param callback Callback that will be called upon data received \param callback Callback that will be called upon data received
*/ */
ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback, esl_socket_t *server_sockP); ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback, void *user_data, esl_socket_t *server_sockP);
ESL_DECLARE(esl_status_t) esl_listen_threaded(const char *host, esl_port_t port, esl_listen_callback_t callback, int max); ESL_DECLARE(esl_status_t) esl_listen_threaded(const char *host, esl_port_t port, esl_listen_callback_t callback, void *user_data, int max);
/*! /*!
\brief Executes application with sendmsg to a specific UUID. Used for outbound socket. \brief Executes application with sendmsg to a specific UUID. Used for outbound socket.
\param handle Handle that the msg will be sent \param handle Handle that the msg will be sent

View File

@ -2,7 +2,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <esl.h> #include <esl.h>
static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr) static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr, void *user_data)
{ {
esl_handle_t handle = {{0}}; esl_handle_t handle = {{0}};
int done = 0; int done = 0;
@ -48,7 +48,7 @@ static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock, struc
int main(void) int main(void)
{ {
esl_global_set_default_logger(7); esl_global_set_default_logger(7);
esl_listen_threaded("localhost", 8040, mycallback, 100000); esl_listen_threaded("localhost", 8040, mycallback, NULL, 100000);
return 0; return 0;
} }

View File

@ -2,7 +2,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <esl.h> #include <esl.h>
static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr) static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr, void *user_data)
{ {
esl_handle_t handle = {{0}}; esl_handle_t handle = {{0}};
int done = 0; int done = 0;
@ -66,7 +66,7 @@ int main(void)
signal(SIGCHLD, SIG_IGN); signal(SIGCHLD, SIG_IGN);
esl_global_set_default_logger(7); esl_global_set_default_logger(7);
esl_listen("localhost", 8040, mycallback, &server_sock); esl_listen("localhost", 8040, mycallback, NULL, &server_sock);
return 0; return 0;
} }