|
Server 0.0.1
HTTP/REST server implementation
|
00001 00023 #include "server.h" 00024 #include "logger.h" 00025 00026 #include "utils/signalHandling.h" 00027 00028 int serverPoll(Server); 00029 int serverHandleAccept(Server, unsigned int); 00030 void serverCloseConn(Server, unsigned int); 00031 ssize_t serverRead(Server, unsigned int); 00032 ssize_t serverWrite(Server, unsigned int); 00033 00034 void 00035 serverRun(Server this) 00036 { 00037 loggerLog(this->logger, LOGGER_INFO, "service started"); 00038 00039 while (!doShutdown) 00040 { 00041 int events; 00042 unsigned int i; 00043 int naccs = 10; 00044 00045 events = serverPoll(this); 00046 if (doShutdown || 0 >= events) break; 00047 00051 if (0 != ((this->fds)[0].revents & POLLIN)) { 00052 events--; 00053 while(-1 != serverHandleAccept(this, 0) && 0 < naccs) { 00054 naccs--; 00055 } 00056 } 00057 00061 if (0 != ((this->fds)[1].revents & POLLIN)) { 00062 events--; 00063 while(-1 != serverHandleAccept(this, 1) && 0 < naccs) { 00064 naccs--; 00065 } 00066 } 00067 00068 for (i=2; i < this->nfds; i++) { 00069 int nreads = 10, nwrites = 10; 00070 00074 if (0 != ((this->fds)[i].revents & POLLIN) && 0 < nreads) { 00075 events--; 00076 nreads--; 00077 00078 serverRead(this, i); 00079 } 00080 00084 if (0 != ((this->fds)[i].revents & POLLOUT) && 0 < nwrites) { 00085 events--; 00086 nwrites--; 00087 00088 serverWrite(this, i); 00089 } 00090 00091 if (0 > events) 00092 break; // no more events to handle 00093 } 00094 } 00095 } 00096 00097 // vim: set ts=4 sw=4: