int main(int argc, char **argv) { int i = 0; chdir(BBSHOME); initsetproctitle(argc, argv, environ); if( argc >= 2 ){ if( strcmp(argv[1], "init") == 0 ){ /* in this case, do NOT run attach_SHM here. because uhash_loader is not run yet. */ return SHMinit(argc - 1, &argv[1]); } attach_SHM(); /* shmctl doesn't need resolve_boards() first */ //resolve_boards(); resolve_garbage(); resolve_fcache(); for( i = 0 ; cmd[i].func != NULL ; ++i ) if( strcmp(cmd[i].cmd, argv[1]) == 0 ){ return cmd[i].func(argc - 1, &argv[1]); } } if( argc == 1 || cmd[i].func == NULL ){ /* usage */ printf("usage: shmctl [command] [options]\n"); printf("commands:\n"); for( i = 0 ; cmd[i].func != NULL ; ++i ) printf("\t%-15s%s\n", cmd[i].cmd, cmd[i].descript); } return 0; }
int main( int argc, char *argv[] ) { SHM = &shared; srand(time(NULL)); signal(SIGINT, forceQuit); int socketfd = socket(PF_INET, SOCK_STREAM, 0), // SCKDGRAM - UDP, STREAM - TCP port; char *port_garbage = NULL; if (argc < 2) { printf("Usage: ./serwer [port]\n"); exit(0); } else { port = strtol(argv[1], &port_garbage, 10);; if (*port_garbage || port <= 0) { perror("Wrong port number. "); exit(0); } } SHMinit(rand() % 1000); CHATprepareMainRoom(); if (socketfd > 0) { struct sockaddr_in my_addr; my_addr.sin_family = PF_INET; my_addr.sin_addr.s_addr = INADDR_ANY; my_addr.sin_port = htons(port); if (bind(socketfd, (struct sockaddr *)&my_addr, sizeof(my_addr)) >= 0) { if (!listen(socketfd, 10)) { // return 0 if successful printf("Running on %d\n\n", port); acceptConnection(&socketfd); } else { perror("Listening error: "); logEvent("Listening error. "); exit(0); } } else { perror("Binding error: "); logEvent("Binding error."); exit(0); } } else { perror("Error creating a socket: "); logEvent("Error creating a socket:"); exit(0); } SHMdestroy(); close(socketfd); return 0; }