Server 0.0.1
HTTP/REST server implementation

src/server/run.c

Go to the documentation of this file.
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:
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines