LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 867|回复: 0

模拟网络掉包的函数

[复制链接]
发表于 2006-4-21 23:29:56 | 显示全部楼层 |阅读模式
用float loss来控制掉包的个数,下面是我写的函数,是错误的,希望大家给点可行的建议。
谢了
ssize_t sendto_unrel(int s ,const void*msg,size_t len,int flags,
                     const struct sockaddr *to,int tolen,float loss)
{
  if(loss==1)
    return len;
  if(loss!=0)
    {
  char tmp[10];
  char *tmpptr;
  sprintf(tmp,"%G",loss);
  tmpptr=strchr(tmp,".");
  if(tmpptr!=NULL)
    {
      int count=0;
      int found=0;
      char *p;
      for(;*++tmpptr!='\0';++count)
        {
          if(found==0&&*tmpptr!='0')
            {
              p=tmpptr;
              found=1;
            }
        }
      unsigned int milestone=atoi(p);
      unsigned int upper_bound;
      int random_num;

      upper_bound=(unsigned int)pow(10,count);
      random_num=1+(int)(upper_bound*(rand()/(RAND_MAX+1.0)));
      if(random_num<=milestone)
        return len;
    }
    }
  retrun(sendto(s,msg,len,flags,to,tolen)==-1);
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表