簡體   English   中英

是否可以讀取為TCP寫入套接字緩沖的字節數?

[英]Is it possible to read the number of bytes buffered for a TCP write socket?

我有一個使用civetweb(以前的mongoose)HTTP服務器庫來創建MJPEG流的應用程序。 當我的MJPEG設置與客戶端連接的網絡的帶寬配置文件匹配時工作正常,但偶爾我們有一個低帶寬連接,我想通過丟幀來容納。

現在,當我調用mg_write()mg_write()庫調用send()如下所示:

send(sock, buf + sent, (size_t) k, MSG_NOSIGNAL);

我想做的是檢查套接字的傳出緩沖區,如果它已滿,則跳過一個幀。 有沒有辦法在應用程序級別檢查這個?

編輯:只是MJPEG人員的旁注,這些TCP緩沖區非常大,我實際上最終測量的只是緩沖區中是否存在任何字節。 如果大於零,我跳過一幀。

您可以在Linux上使用ioctl (以及其他系統上的類似接口):

#include <linux/sockios.h>

size_t sb_sz = sizeof(sock_buffer_size);
ioctl(sock, SIOCOUTQ, &bytes_in_queue);
getsockopt(sock, SOL_SOCKET, SO_SNDBUF, &sock_buffer_size, &sb_sz);
size_t bytes_available = sock_buffer_size - bytes_in_queue;

請注意,它仍然不能100%保證寫入將完全成功,但它給你很好的機會。

我想做的是檢查套接字的傳出緩沖區,如果它已滿,則跳過一個幀。 有沒有辦法在應用程序級別檢查這個?

當然,調用select ()並查看套接字是否選擇為ready-for-write。 如果沒有,則表示套接字的傳出緩沖區已滿。 (你可以使用select()的timeout參數強制select()調用立即返回,如果你不想阻塞它,直到套接字准備好讀/寫/等)

暫無
暫無

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

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