mirror of
https://github.com/slackhq/nebula.git
synced 2026-02-15 09:14:23 +01:00
non-blocking io for linux
This commit is contained in:
15
interface.go
15
interface.go
@@ -290,6 +290,7 @@ func (f *Interface) listenOut(i int) {
|
||||
f.readOutsidePackets(ViaSender{UdpAddr: fromUdpAddr}, plaintext[:0], payload, h, fwPacket, lhh, nb, i, ctCache.Get(f.l))
|
||||
})
|
||||
|
||||
f.l.Errorf("udp reader %v is done", i)
|
||||
f.wg.Done()
|
||||
}
|
||||
|
||||
@@ -307,6 +308,7 @@ func (f *Interface) listenIn(reader io.ReadWriteCloser, i int) {
|
||||
n, err := reader.Read(packet)
|
||||
if err != nil {
|
||||
if !f.closed.Load() {
|
||||
//TODO: should we close? yes
|
||||
f.l.WithError(err).Error("Error while reading outbound packet")
|
||||
}
|
||||
break
|
||||
@@ -315,6 +317,7 @@ func (f *Interface) listenIn(reader io.ReadWriteCloser, i int) {
|
||||
f.consumeInsidePacket(packet[:n], fwPacket, nb, out, i, conntrackCache.Get(f.l))
|
||||
}
|
||||
|
||||
f.l.Errorf("tun reader %v is done", i)
|
||||
f.wg.Done()
|
||||
}
|
||||
|
||||
@@ -492,6 +495,7 @@ func (f *Interface) GetCertState() *CertState {
|
||||
func (f *Interface) Close() error {
|
||||
f.closed.Store(true)
|
||||
|
||||
// Release the udp readers
|
||||
for _, u := range f.writers {
|
||||
err := u.Close()
|
||||
if err != nil {
|
||||
@@ -507,6 +511,13 @@ func (f *Interface) Close() error {
|
||||
}
|
||||
}
|
||||
|
||||
// Release the tun device
|
||||
return f.inside.Close()
|
||||
// Release the tun readers
|
||||
for _, u := range f.readers {
|
||||
err := u.Close()
|
||||
if err != nil {
|
||||
f.l.WithError(err).Error("Error while closing tun device")
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user