int main(int argc, char *argv[]) { int sd; /* socket descriptor */ int port; /* passive socket port */ int retcode; /* program return code */ if (argc != 2) { fprintf(stderr, "Invalid number of arguments.\n\n"); print_usage(argv[0]); return 1; } /* end if */ port = atoi(argv[1]); sd = passive_tcp(port, 5); if (sd < 0) { fprintf(stderr, "ERROR: cannot create passive TCP connection.\n"); return 1; } /* end if */ /* (void) signal(SIGINT, sig_handler); */ pthread_mutex_init(&slave_thread_info.mutex, NULL); pthread_cond_init(&slave_thread_info.thread_exit_cv, NULL); printf("Accepting client requests on port %d.\n", port); retcode = accept_clients(sd); pthread_mutex_destroy(&slave_thread_info.mutex); pthread_cond_destroy(&slave_thread_info.thread_exit_cv); return retcode; } /* end of main */
int main(int argc, char *argv[]) { int retcode = EXIT_SUCCESS; prog_options_t my_opt; // read program options if (get_options(argc, argv, &my_opt) == 0) { print_usage(my_opt.progname); exit(EXIT_FAILURE); } /* end if */ // set the time zone (TZ) to GMT in order to // ignore any other local time zone that would // interfere with correct time string parsing setenv("TZ", "GMT", 1); tzset(); // do some checks and initialisations... open_logfile(&my_opt); check_root_dir(&my_opt); install_signal_handlers(); init_logging_semaphore(); // get root_dir to handle it later in child process char* root_dir = my_opt.root_dir; // start the server and create socket printf("[%d] Starting server '%s'...\n", getpid(), my_opt.progname); int accepting_socket = passive_tcp(my_opt.server_port, 5); struct sockaddr_in from_client; server_running = true; while(server_running) { socklen_t from_client_len = sizeof(from_client); // Accept new Client int listening_socket = accept(accepting_socket, (struct sockaddr *) &from_client, &from_client_len); accept_client(accepting_socket, listening_socket, root_dir); } /* end while */ printf("[%d] Good Bye...\n", getpid()); exit(retcode); } /* end of main */
int main(int argc, char *argv[]) { int retcode = EXIT_SUCCESS; prog_options_t my_opt; // read program options if (get_options(argc, argv, &my_opt) == 0) { print_usage(my_opt.progname); exit(EXIT_FAILURE); } /* end if */ // set the time zone (TZ) to GMT in order to // ignore any other local time zone that would // interfere with correct time string parsing setenv("TZ", "GMT", 1); tzset(); // do some checks and initialisations... open_logfile(&my_opt); check_root_dir(&my_opt); install_signal_handlers(); init_logging_semaphore(); // get root_dir to handle it later in child process char* root_dir = my_opt.root_dir; // start the server and create socket print_log("Starting server '%s'...\n", my_opt.progname); int accepting_socket = passive_tcp(my_opt.server_port, 5); if (accepting_socket < 0){ err_print("Error when opening accepting socket!"); exit(-1); } struct sockaddr_in from_client; int req_no = 0; server_running = true; while(server_running) { socklen_t from_client_len = sizeof(from_client); int listening_socket = accept(accepting_socket, (struct sockaddr *) &from_client, &from_client_len); if (listening_socket >= 0){ /* Accept was ok */ ++req_no; pid_t pid = fork(); if (pid == 0) { /* Child Process */ print_log("Process created to handle new request #%d\n", req_no); close(accepting_socket); handle_client(listening_socket, root_dir); exit(0); } else if (pid > 0) { /* Parent Process */ close(listening_socket); } else { /* Fork Failed */ err_print("Could not fork for new request!"); exit(-1); } } /*else { print_log("Accept failed!\n"); } */ } /* end while */ printf("[%d] Good Bye...\n", getpid()); exit(retcode); } /* end of main */