diff options
Diffstat (limited to 'server')
-rw-r--r-- | server/include/session.h | 1 | ||||
-rw-r--r-- | server/src/session.c | 14 |
2 files changed, 15 insertions, 0 deletions
diff --git a/server/include/session.h b/server/include/session.h index 4e9d646..5032a3a 100644 --- a/server/include/session.h +++ b/server/include/session.h @@ -14,5 +14,6 @@ int init_session(int socket); struct session* find_session(int id); int write_session(int id, const char *data, size_t size); size_t read_session(int id, char *data, size_t size); +int num_alive_sessions(void); #endif diff --git a/server/src/session.c b/server/src/session.c index 8955ff9..70a1cf1 100644 --- a/server/src/session.c +++ b/server/src/session.c @@ -12,6 +12,7 @@ int init_session(int socket) { ses->id = next_id; next_id++; ses->socket = socket; + ses->alive = 1; list_add(&ses->list, &sessions); return ses->id; } @@ -39,3 +40,16 @@ size_t read_session(int id, char *data, size_t size) { return -1; return read(ses->socket, data, size); } + +int num_alive_sessions(void) { + int ret = 0; + + struct list_head *temp = sessions.next; + while (temp != NULL) { + if (container_of(temp, struct session, list)->alive == 1) + ret++; + temp = temp->next; + } + + return ret; +} |