projects
/
yaz-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added session timeout.
[yaz-moved-to-github.git]
/
server
/
eventl.c
diff --git
a/server/eventl.c
b/server/eventl.c
index
42dd1f9
..
7946839
100644
(file)
--- a/
server/eventl.c
+++ b/
server/eventl.c
@@
-4,7
+4,10
@@
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: eventl.c,v $
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: eventl.c,v $
- * Revision 1.9 1995-06-05 10:53:31 quinn
+ * Revision 1.10 1995-06-16 10:31:33 quinn
+ * Added session timeout.
+ *
+ * Revision 1.9 1995/06/05 10:53:31 quinn
* Added a better SCAN.
*
* Revision 1.8 1995/05/16 08:51:01 quinn
* Added a better SCAN.
*
* Revision 1.8 1995/05/16 08:51:01 quinn
@@
-68,6
+71,7
@@
IOCHAN iochan_create(int fd, IOC_CALLBACK cb, int flags)
new->fun = cb;
new->next = iochans;
new->force_event = 0;
new->fun = cb;
new->next = iochans;
new->force_event = 0;
+ new->last_event = new->max_idle = 0;
iochans = new;
return new;
}
iochans = new;
return new;
}
@@
-79,13
+83,13
@@
int event_loop()
IOCHAN p, nextp;
fd_set in, out, except;
int res, max;
IOCHAN p, nextp;
fd_set in, out, except;
int res, max;
- static struct timeval nullto = {0, 0};
+ static struct timeval nullto = {0, 0}, to = {60*5, 0};
struct timeval *timeout;
FD_ZERO(&in);
FD_ZERO(&out);
FD_ZERO(&except);
struct timeval *timeout;
FD_ZERO(&in);
FD_ZERO(&out);
FD_ZERO(&except);
- timeout = 0; /* hang on select */
+ timeout = &to; /* hang on select */
max = 0;
for (p = iochans; p; p = p->next)
{
max = 0;
for (p = iochans; p; p = p->next)
{
@@
-109,16
+113,29
@@
int event_loop()
for (p = iochans; p; p = p->next)
{
int force_event = p->force_event;
for (p = iochans; p; p = p->next)
{
int force_event = p->force_event;
+ time_t now = time(0);
p->force_event = 0;
if (FD_ISSET(p->fd, &in) || force_event == EVENT_INPUT)
p->force_event = 0;
if (FD_ISSET(p->fd, &in) || force_event == EVENT_INPUT)
+ {
+ p->last_event = now;
(*p->fun)(p, EVENT_INPUT);
(*p->fun)(p, EVENT_INPUT);
+ }
if (!p->destroyed && (FD_ISSET(p->fd, &out) ||
if (!p->destroyed && (FD_ISSET(p->fd, &out) ||
- force_event == EVENT_OUTPUT))
+ force_event == EVENT_OUTPUT))
+ {
+ p->last_event = now;
(*p->fun)(p, EVENT_OUTPUT);
(*p->fun)(p, EVENT_OUTPUT);
+ }
if (!p->destroyed && (FD_ISSET(p->fd, &except) ||
force_event == EVENT_EXCEPT))
if (!p->destroyed && (FD_ISSET(p->fd, &except) ||
force_event == EVENT_EXCEPT))
+ {
+ p->last_event = now;
(*p->fun)(p, EVENT_EXCEPT);
(*p->fun)(p, EVENT_EXCEPT);
+ }
+ if (!p->destroyed && p->max_idle && now - p->last_event >
+ p->max_idle)
+ (*p->fun)(p, EVENT_TIMEOUT);
}
for (p = iochans; p; p = nextp)
{
}
for (p = iochans; p; p = nextp)
{
@@
-135,7
+152,7
@@
int event_loop()
for (pr = iochans; pr; pr = pr->next)
if (pr->next == p)
break;
for (pr = iochans; pr; pr = pr->next)
if (pr->next == p)
break;
- assert(pr);
+ assert(pr); /* grave error if it weren't there */
pr->next = p->next;
}
if (nextp == p)
pr->next = p->next;
}
if (nextp == p)