LWIP:SSI输出长度可能导致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
(两个空格继续标记,论坛格式化!) 浏览器无法接收输出&amp;当使用1,3,5,7等字符扩展标记时,Wireshark会报告校验和错误。 浏览器接收输出&amp;当标签扩展为2,4,6,8等字符时,Wireshark报告OK。
如果我从标签前删除一个空格,那么情况就会受到尊重。 此外,如果标签大于129个字符(可疑122),则输出始终正常(尚未看到故障)。
当SSI输出> = 129字节时,则调用http_write()函数,其长度为122(标题和标记),122(SSI的初始部分)和7(SSI的剩余部分)。 让第二个tcp_write()为122似乎可以解决校验和问题。 (将SSI输出拆分成段本身就很奇怪。最多122个块的发送似乎是由资源文件的大小驱动到标签上。)
我已经使用UART printf()和Wireshark检查了SSI输出,并且所有内容看起来都是正确的,输出中没有损坏。 http_write()长度和输出一样正确。
我已经跟踪tcp_write(),此时我开始怀疑自己;肯定tcp_write()不能破坏? 有没有人在嵌入式目标上使用LWIP SSI或者确实是tcp_write()?
答案 0 :(得分:0)
注释/移除: #define LWIP_CHECKSUM_ON_COPY 似乎解决了。