Change how server settings are passed

master
teknomunk 11 months ago
parent a713fd6043
commit 59d375ac72

@ -14,7 +14,7 @@
#include <ucontext.h>
#include <time.h>
#include "app_args.h"
//#include "app_args.h"
#include "request.h"
struct http_request;
@ -33,7 +33,7 @@ struct http_server
ucontext_t context;
};
struct http_server* http_server_new( struct app_args* args, http_server_handler handler, void* handler_data )
struct http_server* http_server_new( struct http_server_args* args, http_server_handler handler, void* handler_data )
{
// Create server structure
struct http_server* srv = (struct http_server*)malloc( sizeof(struct http_server) );
@ -61,28 +61,32 @@ struct http_server* http_server_new( struct app_args* args, http_server_handler
// Bind socket
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(args->port);
addr.sin_port = htons(args->bind_port);
addr.sin_addr.s_addr = INADDR_ANY;
if( !inet_aton( args->addr, &addr.sin_addr ) ) {
printf( "Unable to parse address %s: %s\n", args->addr, strerror(errno) );
exit(1);
if( args->bind_address ) {
if( !inet_aton( args->bind_address, &addr.sin_addr ) ) {
printf( "Unable to parse address %s: %s\n", args->bind_address, strerror(errno) );
exit(1);
}
} else {
args->bind_address = "*";
}
if( -1 == bind( srv->sock, (struct sockaddr*)&addr, sizeof(addr) ) ) {
printf( "Error binding socket to %s:%d: %s\n",
args->addr, args->port, strerror(errno)
args->bind_address, args->bind_port, strerror(errno)
);
exit(1);
}
if( -1 == listen( srv->sock, 0 ) ) {
printf( "Unable to listen on %s:%d: %s\n",
args->addr, args->port, strerror(errno)
args->bind_address, args->bind_port, strerror(errno)
);
exit(1);
}
printf( "Listening on %s:%d\n", args->addr, args->port );
printf( "Listening on %s:%d\n", args->bind_address, args->bind_port );
if( -1 == fcntl( srv->sock, F_SETFL, O_NONBLOCK ) ) {
printf( "Unable to set O_NONBLOCK on server listening socket, continuing with reduced capacity: %s\n", strerror(errno) );

@ -6,9 +6,15 @@ struct app_args;
struct http_server;
struct http_request;
struct http_server_args
{
char* bind_address;
int bind_port;
};
typedef void (*http_server_handler)( struct http_request*, void* handler_data );
struct http_server* http_server_new( struct app_args* args, http_server_handler handler, void* handler_data );
struct http_server* http_server_new( struct http_server_args* args, http_server_handler handler, void* handler_data );
void http_server_process( struct http_server* srv );
void http_server_release( struct http_server* srv );
void http_server_set_debug( struct http_server* srv, bool debug );

Loading…
Cancel
Save