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

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

本文关键字:UDP 缓冲区 Winsock 查找      更新时间:2023-10-16

我有一个处于阻塞模式的UDP套接字,我有突发数据包,有些正在丢失。

  1. 如何在 winsock 的接收缓冲区中找出当前使用的大小?
  2. 如何了解系统是否正在丢弃数据包?

WSAIoctl 通过 FIONREAD 是这样记录的:

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

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

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

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