|
Server 0.0.1
HTTP/REST server implementation
|
#include <stdio.h>#include <poll.h>#include <openssl/ssl.h>#include "class.h"#include "socket.h"#include "logger.h"#include "stream.h"
Go to the source code of this file.
Data Structures | |
| struct | conns |
| struct | Server |
Functions | |
| void | serverRun (Server this) |
Server class. Handles acceptance and closing of connection and uses a class that has to implement the stream reader and writer interface to handle incoming reads and outgoing writes.
Copyright © 2012 Georg Hopp
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
Definition in file server.h.
| void serverRun | ( | Server | this | ) |
until error or signal
handle accept
handle accept SSL
handle reads
handle writes
Definition at line 35 of file run.c.
{
loggerLog(this->logger, LOGGER_INFO, "service started");
while (!doShutdown)
{
int events;
unsigned int i;
int naccs = 10;
events = serverPoll(this);
if (doShutdown || 0 >= events) break;
if (0 != ((this->fds)[0].revents & POLLIN)) {
events--;
while(-1 != serverHandleAccept(this, 0) && 0 < naccs) {
naccs--;
}
}
if (0 != ((this->fds)[1].revents & POLLIN)) {
events--;
while(-1 != serverHandleAccept(this, 1) && 0 < naccs) {
naccs--;
}
}
for (i=2; i < this->nfds; i++) {
int nreads = 10, nwrites = 10;
if (0 != ((this->fds)[i].revents & POLLIN) && 0 < nreads) {
events--;
nreads--;
serverRead(this, i);
}
if (0 != ((this->fds)[i].revents & POLLOUT) && 0 < nwrites) {
events--;
nwrites--;
serverWrite(this, i);
}
if (0 > events)
break; // no more events to handle
}
}
}

