|
|
用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);
} |
|