int main(int argc, char *argv[]) { server_type_t server_type; short int port; int accept_fd; if (argc != 3) { printf("Proper usage of http server is:\n%s <port> <#>\n" "port is the port to serve on, # is either\n" "0: serve only a single request\n" "1: use only a single thread for multiple requests\n" "2: use fork to create a process for each request\n" "3: Extra Credit: use fork and exec when the path is an executable to run the program dynamically. This is how web servers handle dynamic (program generated) content.\n" "4: create a thread for each request\n" "5: use atomic instructions to implement a task queue\n" "6: use a thread pool\n" "7: to be defined\n" "8: to be defined\n" "9: to be defined\n", argv[0]); return -1; } port = atoi(argv[1]); accept_fd = server_create(port); if (accept_fd < 0) return -1; server_type = atoi(argv[2]); switch(server_type) { case SERVER_TYPE_ONE: server_single_request(accept_fd); break; case SERVER_TYPE_SINGLET: server_multiple_requests(accept_fd); break; case SERVER_TYPE_PROCESS: server_processes(accept_fd); break; case SERVER_TYPE_FORK_EXEC: server_dynamic(accept_fd); break; case SERVER_TYPE_SPAWN_THREAD: server_thread_per(accept_fd); break; case SERVER_TYPE_TASK_QUEUE: server_task_queue(accept_fd); break; case SERVER_TYPE_THREAD_POOL: server_thread_pool(accept_fd); break; } close(accept_fd); return 0; }
int main(int argc, char *argv[]) { server_type_t server_type; short int port; int accept_fd; if (argc != 3) { printf("Proper usage of http server is:\n%s <port> <#>\n" "port is the port to serve on, # is either\n" "0: server only a single request\n" "1: use a thread pool and a _bounded_ buffer with " "mutexes + condition variables\n" "2: use a thread pool and compare and swap to " "implement a lock-free stack of requests\n", argv[0]); return -1; } port = atoi(argv[1]); accept_fd = server_create(port); if (accept_fd < 0) return -1; server_type = atoi(argv[2]); switch(server_type) { case SERVER_TYPE_ONE: server_single_request(accept_fd); break; case SERVER_TYPE_THREAD_POOL_BOUND: server_thread_pool_bounded(accept_fd); break; case SERVER_TYPE_THREAD_POOL_ATOMIC: server_thread_pool_lock_free(accept_fd); break; } close(accept_fd); return 0; }
int main(int argc, char *argv[]) { server_type_t server_type; short int port; int accept_fd; if (argc != 3) { printf("Proper usage of http server is:\n%s <port> <#>\n" "port is the port to serve on, # is either\n" "0: serve only a single request\n" "1: serve each request with kthds\n", argv[0]); return -1; } port = atoi(argv[1]); accept_fd = server_create(port); if (accept_fd < 0) return -1; server_type = atoi(argv[2]); switch(server_type) { case SERVER_TYPE_ONE: server_single_request(accept_fd); break; case SERVER_TYPE_TWO: process_kthd_server(accept_fd); break; default: perror("Unknown server type provided.\n"); } close(accept_fd); return 0; }