当前位置:  技术问答>linux和unix

关于ping程序的问题

    来源: 互联网  发布时间:2016-08-20

    本文导语:  我写了一个简单的ping程序,代码如下: #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  void sigalrm_handler(int);  //通过对alarm信号响应发送icmp数据包 void se...

我写了一个简单的ping程序,代码如下:
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

void sigalrm_handler(int);  //通过对alarm信号响应发送icmp数据包
void send_icmp(void);
void recv_icmp(void);
void tvsub(struct timeval *,struct timeval *);  //calculate the transmission time
unsigned short in_cksum(); //calculate the confirmation code
void pr_icmp(char *ptr,int len);
int sockfd;
int pid;  //用于设置icmp的id
int datalen=56; //用于设置icmp数据包的打消
char hostname[128];
struct sockaddr_in dest;
char sendbuf[256];
int seq=0; //用于设置下一个icmp数据包的序列号

int main(int argc,char * argv[])
{
struct sigaction act;
struct hostent *he;
int n;
if(argc!=2)
{
fprintf(stderr,"usage:ping hostn");
exit(1);
}
act.sa_handler=sigalrm_handler;
sigemptyset(&act.sa_mask);
act.sa_flags=0;
sigaction(SIGALRM,&act,NULL); //此函数用于检查或修改指定信号关联的处理动作
pid=getpid();
if(inet_aton(argv[1],&dest.sin_addr)==1) //若输入的是ip地址
{
strcpy(hostname,argv[1]);
}else{ //若输入的是域名
he=gethostbyname(argv[1]);
if(he!=NULL)
{
strcpy(hostname,he->h_name);
dest.sin_addr=*(struct in_addr*)he->h_addr_list[0];
}else{
fprintf(stderr,"host name error:%s %sn",argv[1],hstrerror(h_errno));
exit(1);
}
}
printf("PING %s(%s):n",hostname,inet_ntoa(dest.sin_addr));
sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP); //SOCK_RAW为原始套接字
if(sockfdtv_usec-=in->tv_usec)tv_sec--;
out->tv_usec+=1000000;
}
out->tv_sec-=in->tv_sec;
}


|


忽略这个错误即可

while(1)
{
   ret = recv(...)
   if(ret == -1 && errno = EINTR)
       continue;
}

|
blocking的recvfrom调用,被alarm信号打断了。

|
楼主的代码已经有这个的处理了阿,把printf拿掉,无视它即可

如果你说要不被打断的话,不幸得告诉你。。这是不可能的。
除非你去改linux内核

    
 
 

您可能感兴趣的文章:

  • 我的ping程序怎么老是出现Socket operation on non-socket
  • 局域网里能ping到它的IP地址,但启动WEB程序后,浏览器里不能访问它,在本机上可以访问,???
  • 有人在学习网卡驱动吗?不知道网卡驱动的测试程序怎么写。是不是insmod之后就直接ping试一下??
  • 自己写的ping程序为什么没有数据返回
  • 请教 ping 程序问题
  • Linux网络奇怪问题,能ping通外网,内网ping不通,网关ping不通,DNS能ping通!
  • Linux互ping在局域网内大量丢包,但是linux和windows互ping就没问题。
  • redhat linux7.3下面ping域名不通,ping ip可以!怎么回事啊!直接访问域名也不行,访问ip可以!什么问题啊
  • 帮帮ping 问题
  • 关于ping的问题
  • Solaris ping不通的问题!!!???
  • ping命令显示问题
  • 非常奇怪的ping问题
  • 我想问一个win 7 ping 自己的问题
  • Linux RedHat 7.2 中 ping的一个问题
  • ping命令问题
  • windows系统和linux系统之间ping的问题!!
  • nslookup能查得到域名,但ping不通域名的问题
  • 嵌入式linux ping 问题
  • 问个ping,traceroute的问题
  • 两台主机ping ipv6地址的问题
  • ping,telnet问题
  • LINUX ping 问题
  • 关于ping网络的问题
  • ping的C实现方式 运行之后出现 socket:Permission denied,是什么问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • AIX 中为何ping 新浪的IP地址能ping通,而ping 域名不能ping通?(在线等待)
  • 我在linux里用ping,ping得通,怎么一直在ping啊,但怎么不停止啊
  • redhat es4 我设置了机器名以后,从本机可以ping ,从别的机器ping ip可以,ping 机器名不行。
  • 两台机器一台可以ping通一方,另一方不能ping回来
  • unix5.0.7能ping到自己ping不到别人
  • 加急!!linux下怎么实现ping。并且ping不到的时候返回错误信息
  • 在solaris,可以ping自己,但是无法Ping通别的IP地址
  • 网卡ip本机能ping通,其他局域网内计算机ping不通
  • 网卡激活了,但ping dsn 不通,ping 网关也不通,怎么办?
  • linux网络ping不同自己和其他机子,其他机子ping不同我
  • 编程语言 iis7站长之家
  • vmware虚拟机linux不能ping通主机,主机能ping通虚拟机
  • 很奇怪,板子和板子ping不通,板子和pc可以ping通
  • linux系统 在局域网内ping不通网关,但可以ping通网内的其他机器
  • ping :windows和linux相互ping不通
  • 请问我的网络中怎么有些电脑能PING 通服务器,有些不能ping 服务器
  • 电脑安装window可以ping通其他的机器,但是安装linux不能ping通其他机器怎么回事!
  • 能ping到自己,但ping不到其他的主机??
  • 为什么虚拟机VM里的linux ping不通window 7,但是window 7可以ping通linux?
  • ping得通127.0.0.1,ping 不通设定的IP,应该怎么做?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3