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

View File

@ -79,6 +79,7 @@ func New(addr string) *Pinger {
return &Pinger{
Count: -1,
Interval: time.Second,
RecordRtts: true,
Size: timeSliceLength,
Timeout: time.Second * 100000,
Tracker: r.Int63n(math.MaxInt64),
@ -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)
}
if p.RecordRtts {
p.rtts = append(p.rtts, outPkt.Rtt)
}
handler := p.OnRecv
if handler != nil {
handler(outPkt)