我有我的udp接收器插座相當標準的設置。我的發送者以36Hz發送數據,接收器以72Hz讀取。每次發送12072個字節。C++ udp recvfrom減少下降
當我做貓/ proc/net/udp。我通常會得到
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode ref pointer drops
7017: 0101007F:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 10636 2 0000000000000000 0
7032: 00000000:0044 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 14671 2 0000000000000000 0
7595: 00000000:0277 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 11113 2 0000000000000000 0
7660: 00000000:22B8 00000000:0000 07 00000000:00004100 00:00000000 00000000 1000 0 251331 3 0000000000000000 352743
你可以看到rx_queue在那裏有一些值,讀取速度不夠快?
我的代碼
int recv_len = recvfrom(s, buf, BUFLEN, MSG_TRUNC, (struct sockaddr *) &si_other, &slen);
// dont worry buflen is like 64000 no error here
std::cout <<" recv_len "<<recv_len<<std::endl;
我總是得到輸出recv_len 12072即使隊列是相當大的?爲什麼是這樣 ?有沒有辦法加快我的閱讀或閱讀隊列中的所有消息?即使我的閱讀頻率較高,我也不明白什麼是錯誤的。
也許您的代碼沒有按照您的想法做它在做什麼? (例如,你認爲你的閱讀是在72HZ,但你沒有,或者有一個簡單的bug,你沒有發現......等等) – nos