int ping_main (struct Ping_Options *Ping_Opt) { int one = 1; int ret = 0; if (getuid () == 0) is_root = true; /* Parse command line */ parse_opt(Ping_Opt); ping = ping_init (ICMP_ECHO, getpid ()); if (ping == NULL) /* ping_init() prints our error message. */ exit (1); ping_set_sockopt (ping, SO_BROADCAST, (char *) &one, sizeof (one)); /* Reset root privileges */ setuid (getuid ()); if (count != 0) ping_set_count (ping, count); if (socket_type != 0) ping_set_sockopt (ping, socket_type, &one, sizeof (one)); if (options & OPT_INTERVAL) ping_set_interval (ping, interval); init_data_buffer (patptr, pattern_len); ret = ping_echo (Ping_Opt->Host); Ping_Opt->SuccessCount = ping->ping_num_recv; Ping_Opt->FailureCount = ping->ping_num_xmit - ping->ping_num_recv; Ping_Opt->AverageResponseTime = ping->avg_time; Ping_Opt->MaximumResponseTime = ping->max_time; Ping_Opt->MinimumResponseTime = ping->min_time; free (ping); free (data_buffer); return ret; }
int main (int argc, char **argv) { int index; int status = 0; set_program_name (argv[0]); if (getuid () == 0) is_root = true; /* Parse command line */ iu_argp_init ("ping6", program_authors); argp_parse (&argp, argc, argv, 0, &index, NULL); ping = ping_init (0, getpid ()); if (ping == NULL) /* ping_init() prints our error message. */ exit (1); setsockopt (ping->ping_fd, SOL_SOCKET, SO_BROADCAST, (char *) &one, sizeof (one)); /* Reset root privileges */ setuid (getuid ()); argc -= index; argv += index; if (count != 0) ping_set_count (ping, count); if (socket_type != 0) ping_set_sockopt (ping, socket_type, &one, sizeof (one)); if (options & OPT_INTERVAL) ping_set_interval (ping, interval); init_data_buffer (patptr, pattern_len); while (argc--) { status |= ping_echo (*argv++); ping_reset (ping); } return status; }