Exemplo n.º 1
0
int icmp_select_best_ip(char ip_list[][16], int ip_num, char *best_ip)
{
	int sockfd = 0;
	struct timeval time_delay, min_time;
	struct sockaddr_in from_addr;

	char *cur_ip = NULL, *best = NULL, ip_str[16] = {'\0'};
	int ip_idx = 0;

	if(!ip_list || !best_ip || ip_num <= 1)
		return -1;

	sockfd = icmp_socket();
	if(sockfd < 0){
		perror("socket error");
		return sockfd;
	}
	
	min_time.tv_sec = 0x0FFFFFFF;
	min_time.tv_usec = 0x0FFFFFFF;
	while(1)
	{
		if(ip_idx >= ip_num)
			break;
		cur_ip = ip_list[ip_idx];
		if(!cur_ip)
			break;
		
		select_best_ip(sockfd, cur_ip, &time_delay, &from_addr);
		printf("%s %ld  %ld \n", cur_ip, time_delay.tv_sec, time_delay.tv_usec);
		if(tv_min(&time_delay, &min_time)){
			memset(ip_str,0,sizeof(ip_str));
			strncpy(ip_str, inet_ntoa(from_addr.sin_addr), strlen(inet_ntoa(from_addr.sin_addr)));
			best = ip_str;
		}
		++ip_idx;
	}

	close(sockfd);
	if(best)
		strcpy(best_ip, best);
	else
		return -1;
	
	return 0;
}
Exemplo n.º 2
0
int
tm_min_left_overall (struct timeval *min_result)
{
	int i;
	int nexp;
	struct timeval left;

	nexp = 0;
	tv_set (min_result, HUGE_TV_SEC, 0);

	for (i = 0; i < table_used_; i++)
		if (is_used (table_, i)) {
			if (!tmout_left (i, &left))
				nexp++;
			tv_min (min_result, min_result, &left);
		}
	return nexp;
}