当前位置: 技术问答>linux和unix
关于recvfrom和read函数的接收速率问题
来源: 互联网 发布时间:2016-03-19
本文导语: 请教一下关于recvfrom和read函数最大接收速率的问题。。我做了一个收发UDP数据包的程序,当发送端每秒发送300个数据包时,接收端能全部收到。 当大于300个时,就开始丢包。。请教各位高人,这两个函数的接收速率...
请教一下关于recvfrom和read函数最大接收速率的问题。。我做了一个收发UDP数据包的程序,当发送端每秒发送300个数据包时,接收端能全部收到。
当大于300个时,就开始丢包。。请教各位高人,这两个函数的接收速率只有这么大吗?怎样才能增大接收速率呢??
我用的是64字节的UDP包。。
当大于300个时,就开始丢包。。请教各位高人,这两个函数的接收速率只有这么大吗?怎样才能增大接收速率呢??
我用的是64字节的UDP包。。
|
1、server端接收数据的buffer仍然是65不变,但是
2、client端送信buffer未初始化,我增加了初始化处理。
只做2,不做1,不能保证成功。
1、2都做,在添加sleep和for循环的情况下,测试通过。
只做1,不做2的情况,未验证。
n=recvfrom(sockfd,buffer,65,0,(struct sockaddr *)&addr1,&client);改成
n=recvfrom(sockfd,buffer,64,0,(struct sockaddr *)&addr1,&client);
2、client端送信buffer未初始化,我增加了初始化处理。
只做2,不做1,不能保证成功。
1、2都做,在添加sleep和for循环的情况下,测试通过。
只做1,不做2的情况,未验证。
|
和缓冲区有关系。
recvfrom和read函数都是从内核的缓冲区拷贝数据的。
当内核的缓冲区满了,udp的就有可能丢包, tcp的就可能阻塞。
这时候可以增大缓冲区, 使内核尽可能多的接收数据。
recvfrom和read函数都是从内核的缓冲区拷贝数据的。
当内核的缓冲区满了,udp的就有可能丢包, tcp的就可能阻塞。
这时候可以增大缓冲区, 使内核尽可能多的接收数据。