簡體   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