diff --git a/connection_maker.go b/connection_maker.go index 94064646..718b2fdc 100644 --- a/connection_maker.go +++ b/connection_maker.go @@ -4,7 +4,6 @@ import ( "bytes" "fmt" "log" - "math" "math/rand" "net" "time" @@ -59,7 +58,7 @@ func (cm *ConnectionMaker) String() string { } func (cm *ConnectionMaker) queryLoop(queryChan <-chan *ConnectionMakerInteraction) { - timer := time.NewTimer(math.MaxInt64) + timer := time.NewTimer(MaxDuration) run := func() { timer.Reset(cm.checkStateAndAttemptConnections()) } for { select { @@ -131,7 +130,7 @@ func (cm *ConnectionMaker) checkStateAndAttemptConnections() time.Duration { }) now := time.Now() // make sure we catch items just added - after := time.Duration(math.MaxInt64) + after := MaxDuration for address, target := range cm.targets { if our_connected_targets[address] { delete(cm.targets, address) diff --git a/consts.go b/consts.go index e90a27ad..06add6f9 100644 --- a/consts.go +++ b/consts.go @@ -2,6 +2,7 @@ package weave import ( "time" + "math" ) const ( @@ -23,6 +24,7 @@ const ( FragTestInterval = 5 * time.Minute PMTUVerifyAttempts = 8 PMTUVerifyTimeout = 10 * time.Millisecond // gets doubled with every attempt + MaxDuration = time.Duration(math.MaxInt64) ) const ( diff --git a/pcap.go b/pcap.go index 354ec818..bcca3edd 100644 --- a/pcap.go +++ b/pcap.go @@ -40,7 +40,7 @@ func newPcapIO(ifName string, promisc bool, snaplen int, bufSz int) (handle *Pca if err = inactive.SetSnapLen(snaplen); err != nil { return } - if err = inactive.SetTimeout(-1); err != nil { + if err = inactive.SetTimeout(MaxDuration); err != nil { return } if err = inactive.SetImmediateMode(true); err != nil { @@ -60,7 +60,12 @@ func newPcapIO(ifName string, promisc bool, snaplen int, bufSz int) (handle *Pca } func (pi *PcapIO) ReadPacket() (data []byte, err error) { - data, _, err = pi.handle.ZeroCopyReadPacketData() + for { + data, _, err = pi.handle.ZeroCopyReadPacketData() + if err == nil || err != pcap.NextErrorTimeoutExpired { + break + } + } return }