簡體   English   中英

如何檢查使用的udp緩沖區狀態?

[英]how to check used udp buffer status?

我有一個程序,在visual studio中udp中的recevice消息。

有時候我會錯過一條消息。如果udp rec buffer已滿,我想使用select查看udp緩沖區使用的大小。

我如何才能將select用於此目的?

我在哪里可以看到一個例子?

事后發現您的接收緩沖區已滿,對您沒有任何好處 - 數據包已被丟棄。 更多 - 你需要在connect()bind()之前設置緩沖區大小,之后它們不會改變。

您應該做的是預先設置套接字接收緩沖區,以適應您的流量峰值,並嘗試更快地處理您的網絡輸入。 這通常意味着在非阻塞套接字上執行select() (甚至更好 - 一些高級API,如邊緣觸發模式下的Linux epoll(7) ),並在您獲得EWOULDBLOCK之前耗盡套接字輸入。

編輯0:

您無法通過使用select()或任何其他套接字API發現您錯過了UDP數據包。 這必須在應用程序級協議中完成 ,即從傳輸中向上一層。 通常的做法是在應用程序消息頭中包含序列號。

您可以使用getsockopt來獲取套接字選項,包括接收緩沖區大小。 使用setsockopt來設置大小。

獲取大小的示例:

int size;
getsockopt(socket_fd, SOL_SOCKET, SO_RCVBUF, &size);
std::cout << "Buffer size is currently " << size << " bytes\n";

我認為UDP的一個主要屬性(與TCP相反)是你有時會丟失消息。 你必須設計你的協議來解決這個問題。 我不是UDP的專家,但我不明白看到緩沖區的大小會對你有什么幫助,我不明白你為什么要用select來做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM