rawsocket sendto()的一些数据包被丢弃,在networking中看不到

rawsocket sendto()的一些数据包被丢弃,在networking中看不到,第1张

概述rawsocket sendto()的一些数据包被丢弃,在networking中看不到

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中看不到所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1274592.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存