--- libaitio/src/sock.c 2013/12/15 22:31:44 1.11.2.6 +++ libaitio/src/sock.c 2013/12/15 22:44:30 1.11.2.7 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: sock.c,v 1.11.2.6 2013/12/15 22:31:44 misho Exp $ +* $Id: sock.c,v 1.11.2.7 2013/12/15 22:44:30 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -625,6 +625,18 @@ ioLoopSocket(sock_t * __restrict s, sched_task_func_t return schedRun(s->sock_root, &s->sock_kill); } +static void * +io_progPurge(sched_task_t *task) +{ + sock_t *s = (sock_t*) TASK_ARG(task); + + io_progVacuum(s->sock_prog, 0); + + schedTimer(TASK_ROOT(task), TASK_FUNC(task), TASK_ARG(task), + s->sock_timeout, TASK_DATA(task), TASK_DATLEN(task)); + taskExit(task, NULL); +} + /* * ioBridgeProg2Socket() - Start socket scheduler and bridge program to socket * @@ -638,10 +650,11 @@ ioBridgeProg2Socket(sock_t * __restrict s, const char if (!s || !prgname || s->sock_kill) return -1; - if (s->sock_prog) + if (s->sock_prog) { schedRead(s->sock_root, io_bridgeClient2Pool, s, s->sock_fd, (void*) prgname, 0); - else + schedTimer(s->sock_root, io_progPurge, s, s->sock_timeout, NULL, 0); + } else schedRead(s->sock_root, io_bridgeClient, s, s->sock_fd, (void*) prgname, 0); return schedRun(s->sock_root, &s->sock_kill);