繁体   English   中英

如何在Winsock中查找UDP接收缓冲区的当前使用大小

[英]How to find currently used size of UDP receive buffer in Winsock

我有一个处于阻止模式的UDP套接字,有大量的数据包,有些丢失了。

  1. 如何在Winsock的接收缓冲区中找出当前使用的大小?
  2. 如何理解系统是否在丢弃报文?

WSAIoctl通过FIONREAD的记录方式如下:

如果在s参数中传递的套接字是面向消息的(例如,键入SOCK_DGRAM),则FIONREAD返回报告可读取的字节总数,而不是套接字上排队的第一个数据报(消息)的大小。

我认为这回答了您的第一个问题。 至于第二个,我看不出有什么办法以编程方式解决这一问题。 您应该在应用程序中使用序列号来检测间隙,然后查看接收缓冲区的大小,然后猜测如果缓冲区接近满,则丢失是由于缓冲区空间不足所致。

任何套接字的接收缓冲区大小通过使用带有SO_RCVBUF选项的getsockopt()来给出

我看不到如何在接收方处区分网络中丢失的数据包和本地主机上丢弃的数据包。 您只能说它没有到达,因此您需要一个比UDP更高级的协议才能告诉您,它是带有ACK或NACK的序列号协议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM