linux出现fprint错误,linux下ping代码出错

最近编写了一个linux下实现ping功能的程序,但是在测试时icmp数据包总是阻塞在recvfrom函数中,不知道是什么原因,各位高人请指教。发生错误的相关代码如下:

for(;;)

{

register size;

register u_char ttl;

register delta;

register iIpHeadLen;

ping();

fprintf(stderr,"after ping()n");

size=recvfrom(sock,buf,sizeof(buf),0,(struct sockaddr *)&it,&namelen);

fprintf(stderr,"after recvfromn");//程序总是返回该调试信息,而不会向下运行。

if(size==-1 && errno==EINTR)

{

continue;

}

delta=(int)((time_now()-lSendTime)/1000);

pIpHead=(IPHEAD*)buf;

iIpHeadLen=(int)((pIpHead->ip_verlen&0x0f)icmp_type!=ICMP_ECHOREPLY)

{

continue;

}*/

if(pIcmpHead->icmp_id!=seq||pIcmpHead->icmp_seq!=seq)

{

fprintf(stderr,"i will continue for ICMPHEAD->idn");

continue;

}

sprintf(buf,"icmp_seq=%u bytes=%d ttl=%d",pIcmpHead->icmp_seq,size,ttl);

fprintf(stderr,"reply from %s:%s time=%d msn",host,buf,delta);

max=MAX(delta,max);

min=min?MIN(delta,min):delta;

total+=delta;

++recvd;

++seq;

}

}

ping()主要负责使用sendto来发送icmp数据包,如下:

ping()

{

char buf[200];

int iPacketSize;

ICMPHEAD *pIcmpHead=(ICMPHEAD*)buf;

pIcmpHead->icmp_type=ICMP_ECHO;

pIcmpHead->icmp_code=0;

pIcmpHead->icmp_id=seq;

pIcmpHead->icmp_seq=seq;

pIcmpHead->icmp_chksum=0;

//fprintf(stderr,"1n");

*((long*)pIcmpHead->icmp_data)=time_now();

iPacketSize=ICMP_HEADSIZE+4;

pIcmpHead->icmp_chksum=ChkSum((u_short*)pIcmpHead,iPacketSize);

lSendTime=time_now();

if(sendto(sock,buf,iPacketSize,0,(struct sockaddr*)&it,sizeof(it))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值