|
server 0.0.1
basicserverinfrastructure
|
00001 #ifndef __SERVER_H__ 00002 #define __SERVER_H__ 00003 00004 #include <stdio.h> /* for printf() and fprintf() */ 00005 #include <poll.h> /* for select system call and related */ 00006 00007 #include "class.h" 00008 #include "socket.h" 00009 #include "logger.h" 00010 00011 #define POLL_FD_NSIZE 1024 00012 #define POLL_FD_SIZE (sizeof(struct pollfd) * POLL_FD_NSIZE) 00013 00014 #define MOVE_SIZE(size,idx) ((size) * (POLL_FD_NSIZE-((idx)+1))) 00015 #define CLEAR_CONN(server,idx) \ 00016 memmove(&(((server)->fds)[(idx)]), \ 00017 &(((server)->fds)[(idx)+1]), \ 00018 MOVE_SIZE(sizeof(((server)->fds)[0]),(idx))); \ 00019 memmove(&(((server)->conns)[(idx)]), \ 00020 &(((server)->conns)[(idx)+1]), \ 00021 MOVE_SIZE(sizeof(((server)->conns)[0]),(idx))) 00022 00023 00024 CLASS(Server) { 00025 Logger logger; 00026 Sock sock; 00027 void * reader; 00028 00037 nfds_t nfds; 00038 nfds_t ndel; 00039 struct pollfd fds[POLL_FD_NSIZE]; 00040 00041 struct { 00042 Sock sock; 00043 void * reader; 00044 00045 char wbuf[2048]; 00046 char * rbuf; 00047 unsigned int rpos; 00048 unsigned int wpos; 00049 } conns[POLL_FD_NSIZE]; 00050 }; 00051 00052 void serverRun(Server this); 00053 void serverCloseConn(Server this, unsigned int handle); 00054 00055 #endif // __SERVER_H__ 00056 00057 // vim: set ts=4 sw=4: