初中生
最后登录1970-1-1
在线时间 小时
注册时间2016-8-30
|
楼主 |
发表于 2016-9-2 15:54:32
|
显示全部楼层
终于找到了解决方法,从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不少 |
|