Skip to content

Commit aecfc19

Browse files
committed
system-stack: Fix EADDRNOTAVAIL on new Android systems
1 parent 5d44041 commit aecfc19

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

stack_system.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package tun
22

33
import (
44
"context"
5+
"errors"
56
"net"
67
"net/netip"
78
"syscall"
@@ -120,8 +121,9 @@ func (s *System) start() error {
120121
return nil
121122
})
122123
}
124+
var tcpListener net.Listener
123125
if s.inet4Address.IsValid() {
124-
tcpListener, err := listener.Listen(s.ctx, "tcp4", net.JoinHostPort(s.inet4ServerAddress.String(), "0"))
126+
tcpListener, err = listener.Listen(s.ctx, "tcp4", net.JoinHostPort(s.inet4ServerAddress.String(), "0"))
125127
if err != nil {
126128
return err
127129
}
@@ -130,7 +132,16 @@ func (s *System) start() error {
130132
go s.acceptLoop(tcpListener)
131133
}
132134
if s.inet6Address.IsValid() {
133-
tcpListener, err := listener.Listen(s.ctx, "tcp6", net.JoinHostPort(s.inet6ServerAddress.String(), "0"))
135+
// Fix EADDRNOTAVAIL on new Android systems
136+
for i := 0; i < 3; i++ {
137+
if err != nil {
138+
time.Sleep(100 * time.Millisecond)
139+
}
140+
tcpListener, err = listener.Listen(s.ctx, "tcp6", net.JoinHostPort(s.inet6ServerAddress.String(), "0"))
141+
if !errors.Is(err, syscall.EADDRNOTAVAIL) {
142+
break
143+
}
144+
}
134145
if err != nil {
135146
return err
136147
}

0 commit comments

Comments
 (0)