File tree Expand file tree Collapse file tree 1 file changed +9
-7
lines changed
transport/internet/finalmask/xicmp Expand file tree Collapse file tree 1 file changed +9
-7
lines changed Original file line number Diff line number Diff line change @@ -20,6 +20,7 @@ const (
2020 maxPollDelay = 10 * time .Second
2121 pollDelayMultiplier = 2.0
2222 pollLimit = 16
23+ windowSize = 1000
2324)
2425
2526type packet struct {
@@ -30,7 +31,6 @@ type packet struct {
3031type seqStatus struct {
3132 needSeqByte bool
3233 seqByte byte
33- received bool
3434}
3535
3636type xicmpConnClient struct {
@@ -129,12 +129,14 @@ func (c *xicmpConnClient) encode(p []byte) ([]byte, error) {
129129 c .seqStatus [c .seq ] = & seqStatus {
130130 needSeqByte : needSeqByte ,
131131 seqByte : seqByte ,
132- received : false ,
133132 }
134133
134+ delete (c .seqStatus , int (uint16 (c .seq - windowSize )))
135+
135136 c .seq ++
136137
137138 if c .seq == 65536 {
139+ delete (c .seqStatus , int (uint16 (c .seq - windowSize )))
138140 c .seq = 1
139141 }
140142
@@ -168,16 +170,14 @@ func (c *xicmpConnClient) recvLoop() {
168170 continue
169171 }
170172
173+ c .mutex .Lock ()
171174 seqStatus , ok := c .seqStatus [echo .Seq ]
175+ c .mutex .Unlock ()
172176
173177 if ! ok {
174178 continue
175179 }
176180
177- if seqStatus .received {
178- continue
179- }
180-
181181 if seqStatus .needSeqByte {
182182 if len (echo .Data ) <= 1 {
183183 continue
@@ -189,7 +189,9 @@ func (c *xicmpConnClient) recvLoop() {
189189 }
190190
191191 if len (echo .Data ) > 0 {
192- seqStatus .received = true
192+ c .mutex .Lock ()
193+ delete (c .seqStatus , echo .Seq )
194+ c .mutex .Unlock ()
193195
194196 buf := make ([]byte , len (echo .Data ))
195197 copy (buf , echo .Data )
You can’t perform that action at this time.
0 commit comments