Server 0.0.1
HTTP/REST server implementation

include/server.h File Reference

#include <stdio.h>
#include <poll.h>
#include <openssl/ssl.h>
#include "class.h"
#include "socket.h"
#include "logger.h"
#include "stream.h"
Include dependency graph for server.h:

Go to the source code of this file.

Data Structures

struct  conns
struct  Server

Functions

void serverRun (Server this)

Detailed Description

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.

Author:
Georg Hopp

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.


Function Documentation

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
                }
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines