LWIP:SSI輸出長度可能導致TCP/IP校驗和錯誤LWIP TCP/IP校驗和錯誤
我使用在ARM LPC4357 LWIP 1.4.1運行(LPCOpen 2.1.12,日期2014年5月15日) 。 我正在使用httpserver_raw並添加了一些SSI處理程序。
我發現系統是一個包含標籤和字節數的SSI處理程序輸出線的兩個大小很敏感。 標籤包含在輸出中。 當擴展標記:
\r\n
spacespace<!--#s_add-->\r\n
(!兩個空格進行標記,論壇格式) 瀏覽器無法接收輸出& Wireshark的報告校驗和錯誤時,標籤與擴大1,3,5, 7等字符。 瀏覽器接收時,標籤與2,4,6,8個字符擴展輸出& Wireshark的報告確定。
如果我從標籤那麼情況就reveresed之前刪除的空間。 此外,如果標籤大於129個字符(可疑122),則輸出總是正常(尚未發現故障)。
當SSI輸出大於等於129字節時,將調用長度爲122(頭和標籤),122(SSI的初始部分)和7(SSI的剩餘部分)的http_write()函數。 使用122的第二個tcp_write()似乎可以解決校驗和問題。 (拆分SSI輸出成段本身是一個古怪。在高達122似乎是由高達標籤中的資源文件的大小來驅動塊發送)。
我已檢查了SSI使用UART輸出的printf()的和在Wireshark的和所有似乎是正確的,也有在輸出沒有損壞。 http_write()長度與輸出一樣正確。
據我所追蹤的tcp_write(),我開始懷疑自己在這一點;當然tcp_write()不能被破壞? 有沒有人在嵌入式目標或tcp_write()上使用LWIP SSI?