在main函数中有信号的注册:
/*截取信号SIGINT,将icmp_sigint挂接上*/
signal(SIGINT, icmp_sigint);
/*终端信号处理函数SIGINT*/
static void icmp_sigint(int signo)
{
alive = 0; /*告诉接收和发送线程结束程序*/
gettimeofday(&tv_end, NULL); /*读取程序结束时间*/
tv_interval = icmp_tvsub(tv_end, tv_begin); /*计算一下总共所用时间*/
return;
}
main函数中最终关闭原始套接字并且显示统计结果 :
/*清理并打印统计结果*/
close(rawsock);
icmp_statistics();
/*打印全部ICMP发送接收统计结果*/
static void icmp_statistics(void)
{
long time = (tv_interval.tv_sec * 1000 )+ (tv_interval.tv_usec/1000);
printf("--- %s ping statistics ---\n",dest_str); /*目的IP地址*/
printf("%d packets transmitted, %d received, %d%% packet loss, time %ldms\n",
packet_send, /*发送*/
packet_recv, /*接收*/
(packet_send-packet_recv)*100/packet_send, /*丢失百分比*/
time); /*时间*/
}