Beispiel #1
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: 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;
}
Beispiel #2
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;
}
Beispiel #3
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;
}