我在Linux下編寫一個接口,它從TCP套接字獲取數據。用戶提供一個緩衝區,其中存儲接收的數據。如果提供的Buffer很小,我只想返回一個錯誤。 第一個問題是確定Buffer是否很小。 recv()函數只是返回實際寫入緩衝區的字節數。如果我使用recv()手冊頁中聲明的MSG_TRUNC標誌,它仍會返回相同的結果。 第二個問題是丟棄仍然在套接字中排隊的數據。所以,如果我確定我提供的Buffer很小,我只想擦除套接字上留下的所有內容。除了關閉並重新打開套接字或只是接收到沒有剩下任何東西之外,是否還有其他方法可以這樣做? 問候確定是否有數據留在套接字上並丟棄它
託比
根據[tcp(7)手冊頁](http://man7.org/linux/man-pages/man7/tcp.7.html):「自2.4版以來,Linux支持使用' 'recv(2)'(''recvmsg(2)''''flags'參數中的'MSG_TRUNC'。這個標誌使得接收到的數據字節被丟棄,而不是返回到調用者提供的緩衝區中。 2.4.4,'MSG_TRUNC'與'MSG_OOB'一起使用來接收帶外數據時也有這種效果。*「 –