我有一個不尋常的情況:我在嵌入式情況下使用Linux系統(目前使用2.6.20內核的英特爾盒),它必須與具有部分中斷的TCP實現的嵌入式系統進行通信。就在我現在可以告訴他們的情況下,他們希望來自我們的每條消息都來自單獨的以太網幀!當消息分散在以太網幀中時,它們似乎有問題。我需要一個TCP選項(ioctl)立即發送數據
我們在設備的本地網絡上,我們之間沒有路由器(只是一個交換機)。
當然,我們正試圖迫使他們修復他們的系統,但這可能不會結束。
我已經在我的套接字上設置了TCP_NODELAY(我連接到它們),但是這隻有在我不嘗試一次發送多條消息時纔有用。如果我連續有幾個傳出消息,那麼這些消息往往會以一個或兩個以太網幀結束,這會導致其他系統出現問題。
我通常可以避免使用計時器來避免發送消息太靠近在一起的問題,但這顯然限制了我們的吞吐量。此外,如果我把時間降得太低,我就會冒着網絡擁塞阻止數據包傳輸,並最終允許我的多條消息進入同一個數據包。
有什麼辦法可以判斷驅動程序是否有數據排隊?有什麼辦法可以強制驅動程序在獨立的傳輸層數據包中發送獨立的寫入調用嗎?我查看了套接字(7)和tcp(7)手冊頁,但沒有發現任何內容。這可能只是我不知道我在找什麼。顯然,UDP將是一種出路,但是,我認爲我們不能在這一點上讓另一端改變任何東西。
任何幫助非常感謝。
不錯的主意。不幸的是,由於消息的大小不統一,我不能選擇在這種情況下每幀保證一條消息的MTU。 – 2008-11-03 16:41:26