socketFd_ = socket(AF_INET,SOCK_RAW,protoType); sentBytes = sendto(socketFd_,buf,len,(struct sockaddr *)&sa,sizeof(structsockaddr_in)); protoType = GRE
我正在networking中发送1000个数据包。 如果我的tx数据包速率是40,我能看到wireshark中的所有数据包。 然而,当我将尝试以100的速率发送一些数据包(3-4)不会在networking中达成,但sendto没有返回任何错误。 我知道sendto只是把txpacket放入队列中,不能保证在networking中传送数据包,但是从那里我可以得到丢包的统计数据和内核丢包的原因。 我曾尝试增加界面的txqueuelen到65000,但它没有帮助。 我怎么能deBUGging这个问题?
当path长于PATH_MAX时,从文件描述符获取path
如何在读取之前刷新串口?
windows拖放控制台应用程序的问题
在共享(.shproj)项目中添加引用
pthread_join破坏堆栈中的pthread_create参数
你是正确的sendto将只是把txpacket在队列中,不保证传递。
从sendto上的IEEE文档:
sendto()调用的成功完成并不保证消息的传递。 返回值-1表示只有本地检测到的错误。
你必须通过ioctl()和getsockopt()来执行一些你自己的限制,就像你几乎要做的那样。 我不认为你可以期望网络堆栈为你做这一切。
就像是:
sendMsgThrottled( msg Msg ) { ioctl(socketFd_,SIOCOUTQ,&outstandingBytes); if ( outStandingBytes < limit ) sendto(socketFd_,..) else queueMsg(); /* Or delay */ }
我会用同一台机器上的发送和接收器来测试这个,丢包可能来自除了 *** 作系统的网络层之外的其他地方。
总结以上是内存溢出为你收集整理的rawsocket sendto()的一些数据包被丢弃,在networking中看不到全部内容,希望文章能够帮你解决rawsocket sendto()的一些数据包被丢弃,在networking中看不到所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)