Add option not to store all received RTTs (#115)

This prevents memory bloat from a process that wants to do very long-running ping tests.
This commit is contained in:
rrcollier 2020-10-20 23:19:59 +01:00 committed by GitHub
parent 5f9dc3248b
commit 265e7c64b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

19
ping.go
View File

@ -77,11 +77,12 @@ var (
func New(addr string) *Pinger {
r := rand.New(rand.NewSource(time.Now().UnixNano()))
return &Pinger{
Count: -1,
Interval: time.Second,
Size: timeSliceLength,
Timeout: time.Second * 100000,
Tracker: r.Int63n(math.MaxInt64),
Count: -1,
Interval: time.Second,
RecordRtts: true,
Size: timeSliceLength,
Timeout: time.Second * 100000,
Tracker: r.Int63n(math.MaxInt64),
addr: addr,
done: make(chan bool),
@ -122,6 +123,10 @@ type Pinger struct {
// Number of packets received
PacketsRecv int
// If true, keep a record of rtts of all received packets.
// Set to false to avoid memory bloat for long running pings.
RecordRtts bool
// rtts is all of the Rtts
rtts []time.Duration
@ -538,7 +543,9 @@ func (p *Pinger) processPacket(recv *packet) error {
return fmt.Errorf("invalid ICMP echo reply; type: '%T', '%v'", pkt, pkt)
}
p.rtts = append(p.rtts, outPkt.Rtt)
if p.RecordRtts {
p.rtts = append(p.rtts, outPkt.Rtt)
}
handler := p.OnRecv
if handler != nil {
handler(outPkt)