[openfirmware] r1037 - ofw/inet
svn at openfirmware.info
svn at openfirmware.info
Sat Dec 20 07:28:02 CET 2008
Author: wmb
Date: 2008-12-20 07:28:02 +0100 (Sat, 20 Dec 2008)
New Revision: 1037
Modified:
ofw/inet/tcp.fth
Log:
TCP - fixed a longstanding problem with passive connection termination.
Modified: ofw/inet/tcp.fth
===================================================================
--- ofw/inet/tcp.fth 2008-12-19 19:06:16 UTC (rev 1036)
+++ ofw/inet/tcp.fth 2008-12-20 06:28:02 UTC (rev 1037)
@@ -542,6 +542,7 @@
0 value cantrcvmore?
: set-flag ( bitmask -- ) t_flags or to t_flags ;
+: clear-flag ( bitmask -- ) invert t_flags and to t_flags ;
: set-acknow ( -- ) acknow set-flag ;
: clear-iflag ( flag -- ) iflags swap invert and to iflags ;
: iflag? ( bitmask -- ) iflags and 0<> ;
@@ -961,7 +962,7 @@
win 0> rcv_nxt win + rcv_adv s> and if
rcv_nxt win + to rcv_adv
then
- t_flags acknow delack or invert and to t_flags
+ acknow delack or clear-flag
;
: tcp_output ( -- )
@@ -1063,8 +1064,8 @@
\ ACK for outgoing data
- iack snd_una - 0>
- iack snd_max - 0<= and
+ iack snd_una s>
+ iack snd_max s<= and
snd_cwnd snd_wnd >= and
t_dupacks tcprexmtthresh < and if
\ This is a pure ack for outstanding data
@@ -1541,6 +1542,7 @@
acked wbuf-actual > dup if ( flag )
snd_wnd wbuf-actual - to snd_wnd ( flag )
wbuf-actual wbuf-drop ( flag )
+ sentfin clear-flag
else ( flag )
acked wbuf-drop ( flag )
snd_wnd acked - to snd_wnd ( flag )
@@ -1635,7 +1637,7 @@
iack snd_max = if
tcpt_rexmt off
- 1 to needoutput
+ true to needoutput
else
tcpt_persist @ 0= if t_rxtcur tcpt_rexmt ! then
then
@@ -1994,7 +1996,7 @@
false instance value do-delack?
: do-delack ( -- )
do-delack? if
- t_flags delack invert and acknow or to t_flags
+ delack clear-flag acknow set-flag
tcp_output
false to do-delack?
then
More information about the openfirmware
mailing list