forked from lda/telodendria
Accept #29
This commit is contained in:
parent
30d055d570
commit
315589cd1b
5 changed files with 40 additions and 5 deletions
|
@ -39,6 +39,7 @@ struct HttpServer
|
||||||
{
|
{
|
||||||
int sd;
|
int sd;
|
||||||
unsigned int nThreads;
|
unsigned int nThreads;
|
||||||
|
unsigned int maxConnections;
|
||||||
pthread_t socketThread;
|
pthread_t socketThread;
|
||||||
|
|
||||||
volatile unsigned int stop:1;
|
volatile unsigned int stop:1;
|
||||||
|
@ -49,7 +50,7 @@ struct HttpServer
|
||||||
};
|
};
|
||||||
|
|
||||||
HttpServer *
|
HttpServer *
|
||||||
HttpServerCreate(unsigned short port, unsigned int nThreads,
|
HttpServerCreate(unsigned short port, unsigned int nThreads, unsigned int maxConnections,
|
||||||
HttpHandler * requestHandler, void *handlerArgs)
|
HttpHandler * requestHandler, void *handlerArgs)
|
||||||
{
|
{
|
||||||
HttpServer *server;
|
HttpServer *server;
|
||||||
|
@ -85,8 +86,7 @@ HttpServerCreate(unsigned short port, unsigned int nThreads,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: Make this a user-tunable parameter? */
|
if (listen(server->sd, maxConnections) < 0)
|
||||||
if (listen(server->sd, 32) < 0)
|
|
||||||
{
|
{
|
||||||
close(server->sd);
|
close(server->sd);
|
||||||
free(server);
|
free(server);
|
||||||
|
@ -94,6 +94,7 @@ HttpServerCreate(unsigned short port, unsigned int nThreads,
|
||||||
}
|
}
|
||||||
|
|
||||||
server->nThreads = nThreads;
|
server->nThreads = nThreads;
|
||||||
|
server->maxConnections = maxConnections;
|
||||||
server->requestHandler = requestHandler;
|
server->requestHandler = requestHandler;
|
||||||
server->handlerArgs = handlerArgs;
|
server->handlerArgs = handlerArgs;
|
||||||
server->stop = 0;
|
server->stop = 0;
|
||||||
|
|
|
@ -297,7 +297,7 @@ main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Bind the socket before possibly dropping permissions */
|
/* Bind the socket before possibly dropping permissions */
|
||||||
httpServer = HttpServerCreate(tConfig->listenPort, tConfig->threads,
|
httpServer = HttpServerCreate(tConfig->listenPort, tConfig->threads, tConfig->maxConnections,
|
||||||
TelodendriaHttpHandler, NULL);
|
TelodendriaHttpHandler, NULL);
|
||||||
if (!httpServer)
|
if (!httpServer)
|
||||||
{
|
{
|
||||||
|
|
|
@ -153,6 +153,11 @@ TelodendriaConfigParse(HashMap * config, LogConfig * lc)
|
||||||
if (IsInteger(ArrayGet(value, 0)))
|
if (IsInteger(ArrayGet(value, 0)))
|
||||||
{
|
{
|
||||||
tConfig->threads = atoi(ArrayGet(value, 0));
|
tConfig->threads = atoi(ArrayGet(value, 0));
|
||||||
|
if (!tConfig->threads)
|
||||||
|
{
|
||||||
|
Log(lc, LOG_ERROR, "threads must be greater than zero");
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -162,6 +167,34 @@ TelodendriaConfigParse(HashMap * config, LogConfig * lc)
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
directive = (ConfigDirective *) HashMapGet(config, "max-connections");
|
||||||
|
if (!directive)
|
||||||
|
{
|
||||||
|
Log(lc, LOG_WARNING, "max-connections not specified; using defaults, which may change");
|
||||||
|
tConfig->maxConnections = 32;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ASSERT_NO_CHILDREN("max-connections");
|
||||||
|
ASSERT_VALUES("max-connections", 1);
|
||||||
|
if (IsInteger(ArrayGet(value, 0)))
|
||||||
|
{
|
||||||
|
tConfig->maxConnections = atoi(ArrayGet(value, 0));
|
||||||
|
if (!tConfig->maxConnections)
|
||||||
|
{
|
||||||
|
Log(lc, LOG_ERROR, "max-connections must be greater than zero.");
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log(lc, LOG_ERROR, "Expected integer for max-connections, got '%s'", ArrayGet(value, 0));
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
GET_DIRECTIVE("federation");
|
GET_DIRECTIVE("federation");
|
||||||
ASSERT_NO_CHILDREN("federation");
|
ASSERT_NO_CHILDREN("federation");
|
||||||
ASSERT_VALUES("federation", 1);
|
ASSERT_VALUES("federation", 1);
|
||||||
|
|
|
@ -31,7 +31,7 @@ typedef struct HttpServer HttpServer;
|
||||||
typedef void (HttpHandler) (HttpRequest *, HttpResponse *, void *);
|
typedef void (HttpHandler) (HttpRequest *, HttpResponse *, void *);
|
||||||
|
|
||||||
extern HttpServer *
|
extern HttpServer *
|
||||||
HttpServerCreate(unsigned short, unsigned int, HttpHandler *, void *);
|
HttpServerCreate(unsigned short, unsigned int, unsigned int, HttpHandler *, void *);
|
||||||
|
|
||||||
extern void
|
extern void
|
||||||
HttpServerFree(HttpServer *);
|
HttpServerFree(HttpServer *);
|
||||||
|
|
|
@ -61,6 +61,7 @@ typedef struct TelodendriaConfig
|
||||||
unsigned short listenPort;
|
unsigned short listenPort;
|
||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
unsigned int threads;
|
unsigned int threads;
|
||||||
|
unsigned int maxConnections;
|
||||||
|
|
||||||
char *logOut;
|
char *logOut;
|
||||||
char *logTimestamp;
|
char *logTimestamp;
|
||||||
|
|
Loading…
Reference in a new issue