lwip连续发数据卡死_LWIP发送视频数据流的崩溃bug问题!

终于找到了解决方法,从LWIP的论坛上找到的,网址如下http://savannah.nongnu.org/bugs/?36380

原来LWIP1.4.1版本有bug,竟然被我碰到了!!!!关于bug的修改,论坛也提供了补丁http://savannah.nongnu.org/patch ... tem_id=8237#options

补丁中修改了tcp_out.c文件中的tcp_rexmit_rto(struct tcp_pcb *pcb)函数

diff --git a/src/core/tcp_out.c b/src/core/tcp_out.c

index b9fc339..524416e 100644

--- a/src/core/tcp_out.c

+++ b/src/core/tcp_out.c

@@ -1261,11 +1261,21 @@ tcp_rexmit_rto(struct tcp_pcb *pcb)

for (seg = pcb->unacked; seg->next != NULL; seg = seg->next);

/* concatenate unsent queue after unacked queue */

seg->next = pcb->unsent;

+#if TCP_OVERSIZE

+ /* if last unsent changed, we need to update unsent_oversize */

+ if (pcb->unsent == NULL) {

+#if TCP_OVERSIZE_DBGCHECK

+ pcb->unsent_oversize = seg->oversize_left;

+#else

+ /* Punt on figuring this out since we always use TCP_OVERSIZE_DBGCHECK */

+#error "Without tcp_seg.oversize_left, how can unsent_oversize be updated?"

+#endif /* TCP_OVERSIZE_DBGCHECK */

+ }

+#endif /* TCP_OVERSIZE */

/* unsent queue is the concatenated queue (of unacked, unsent) */

pcb->unsent = pcb->unacked;

/* unacked queue is now empty */

pcb->unacked = NULL;

- /* last unsent hasn't changed, no need to reset unsent_oversize */

/* increment number of retransmissions */

++pcb->nrtx;

真是坑爹啊!!!

最近lwip有了2.0版本,然后我直接下载2.0版本把tcp_rexmit_rto(struct tcp_pcb *pcb)函数copy一下,然后编译下载,OK了,终于可以输出视频流了!!!

打算把工程用lwip2.0移植,1.4.1貌似bug不少


版权声明:本文为weixin_39520988原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。