mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2025-04-29 14:45:07 +03:00
Don't indefinitely block TUN/TAP reader goroutine when a conn error happens
This commit is contained in:
parent
396c879d0f
commit
9e086e70f0
2 changed files with 8 additions and 3 deletions
|
@ -58,13 +58,18 @@ func (s *tunConn) reader() error {
|
|||
// TODO don't start a new goroutine for every packet read, this is probably a big part of the slowdowns we saw when refactoring
|
||||
if n, err = s.conn.Read(b); err != nil {
|
||||
s.tun.log.Errorln(s.conn.String(), "TUN/TAP conn read error:", err)
|
||||
if e, eok := err.(yggdrasil.ConnError); eok && !e.Temporary() {
|
||||
close(s.stop)
|
||||
} else {
|
||||
read <- false
|
||||
}
|
||||
return
|
||||
}
|
||||
read <- true
|
||||
}()
|
||||
select {
|
||||
case <-read:
|
||||
if n > 0 {
|
||||
case r := <-read:
|
||||
if r && n > 0 {
|
||||
bs := append(util.GetBytes(), b[:n]...)
|
||||
select {
|
||||
case s.tun.send <- bs:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue