@@ -12,6 +12,7 @@ import (
12
12
"strings"
13
13
"sync"
14
14
"testing"
15
+ "time"
15
16
16
17
"golang.org/x/net/internal/iana"
17
18
"golang.org/x/net/ipv6"
@@ -440,12 +441,22 @@ func testPacketConnConcurrentReadWriteUnicast(t *testing.T, p *ipv6.PacketConn,
440
441
if err := p .SetControlMessage (cf , toggle ); err != nil {
441
442
fatalf ("%v" , err )
442
443
}
443
- n , err := p .WriteTo (data , & cm , dst )
444
- if err != nil {
445
- fatalf ("%v" , err )
446
- }
447
- if n != len (data ) {
448
- fatalf ("got %d; want %d" , n , len (data ))
444
+
445
+ backoff := time .Millisecond
446
+ for {
447
+ n , err := p .WriteTo (data , & cm , dst )
448
+ if err != nil {
449
+ if n == 0 && isENOBUFS (err ) {
450
+ time .Sleep (backoff )
451
+ backoff *= 2
452
+ continue
453
+ }
454
+ fatalf ("%v" , err )
455
+ }
456
+ if n != len (data ) {
457
+ fatalf ("got %d; want %d" , n , len (data ))
458
+ }
459
+ break
449
460
}
450
461
}
451
462
batchWriter := func (toggle bool ) {
@@ -468,15 +479,25 @@ func testPacketConnConcurrentReadWriteUnicast(t *testing.T, p *ipv6.PacketConn,
468
479
Addr : dst ,
469
480
},
470
481
}
471
- n , err := p .WriteBatch (ms , 0 )
472
- if err != nil {
473
- fatalf ("%v" , err )
474
- }
475
- if n != len (ms ) {
476
- fatalf ("got %d; want %d" , n , len (ms ))
477
- }
478
- if ms [0 ].N != len (data ) {
479
- fatalf ("got %d; want %d" , ms [0 ].N , len (data ))
482
+
483
+ backoff := time .Millisecond
484
+ for {
485
+ n , err := p .WriteBatch (ms , 0 )
486
+ if err != nil {
487
+ if n == 0 && isENOBUFS (err ) {
488
+ time .Sleep (backoff )
489
+ backoff *= 2
490
+ continue
491
+ }
492
+ fatalf ("%v" , err )
493
+ }
494
+ if n != len (ms ) {
495
+ fatalf ("got %d; want %d" , n , len (ms ))
496
+ }
497
+ if ms [0 ].N != len (data ) {
498
+ fatalf ("got %d; want %d" , ms [0 ].N , len (data ))
499
+ }
500
+ break
480
501
}
481
502
}
482
503
0 commit comments