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

时间:2014-04-08 12:41:24

标签: c++ networking udp winsock

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

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

2 个答案:

答案 0 :(得分:1)

传递FIONREAD的

WSAIoctl以这种方式记录:

  

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

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

答案 1 :(得分:0)

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

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