您的位置:首页 > 其它

原始套接字之PING(4)

2015-04-19 23:13 211 查看
ICMP响应接收:

/*接收ping目的主机的回复*/
static void *icmp_recv(void *argv)
{
/*轮询等待时间*/
struct timeval tv;
tv.tv_usec = 200;
tv.tv_sec = 0;
fd_set  readfd;
/*当没有信号发出一直接收数据*/
while(alive)
{
int ret = 0;
FD_ZERO(&readfd);
FD_SET(rawsock, &readfd);
ret = select(rawsock+1,&readfd, NULL, NULL, &tv);
switch(ret)
{
case -1:
/*错误发生*/
break;
case 0:
/*超时*/
break;
default:
{
/*接收数据*/
int size = recv(rawsock, recv_buff,sizeof(recv_buff),
0);
if(errno == EINTR)
{
perror("recvfrom error");
continue;
}
/*解包,并设置相关变量*/
ret = icmp_unpack(recv_buff, size);
if(ret == -1)
{
continue;
}
}
break;
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: