diff --git a/src/main.c b/src/main.c index bbd54b0..7a7c41e 100644 --- a/src/main.c +++ b/src/main.c @@ -20,7 +20,7 @@ sig_atomic_t connections = 0; void* worker(void* arg){ FILE* client = (FILE*) arg; - char buffer[100]; + char buffer[128]; ++connections; int status; while(fgets(buffer, sizeof(buffer), client)){ @@ -44,8 +44,10 @@ void* worker(void* arg){ } void on_signal(){ + printf("Shutting down fast-cache\r\n"); if(server){ printf("Closing socket\r\n"); + shutdown(server, 2); close(server); } @@ -62,9 +64,14 @@ void on_signal(){ } int main(){ - signal(SIGINT, on_signal); - int pool_size = 10; + int i, addr_len, yes, port, pool_size; + pool_size = 10; pthread_t pool[pool_size]; + char* base_url = "http://127.0.0.1:8000/"; + struct sockaddr_in addr, client_addr; + + signal(SIGINT, on_signal); + signal(SIGTERM, on_signal); queue_init(&requests); @@ -74,14 +81,11 @@ int main(){ return -1; } - int i; printf("Starting %d worker threads\r\n", pool_size); for(i = 0; i < pool_size; ++i){ - pthread_create(&(pool[i]), NULL, call_proxy, NULL); + pthread_create(&(pool[i]), NULL, call_proxy, (void*)base_url); } - struct sockaddr_in addr, client_addr; - int addr_len; server = socket(PF_INET, SOCK_STREAM, 0); if(!server){ @@ -89,20 +93,23 @@ int main(){ return -1; } + port = 7000; addr.sin_family = AF_INET; - addr.sin_port = htons(7000); + addr.sin_port = htons(port); addr.sin_addr.s_addr = htonl(INADDR_ANY); if(bind(server, (struct sockaddr*)&addr, sizeof(addr)) < 0){ - fprintf(stderr, "Address already in use\r\n"); + perror("Error binding socket"); return -1; } + yes = 1; + setsockopt(server,SOL_SOCKET,(SO_REUSEPORT | SO_REUSEADDR), &yes, sizeof(yes)); if(listen(server, 24) < 0){ - fprintf(stderr, "Address already in use\r\n"); + perror("Error binding socket"); return -1; } else{ - printf("Listening on 0.0.0.0:7000\r\n"); + printf("Listening on 0.0.0.0:%d\r\n", port); int client; pthread_t child; FILE *fp;