mirror of
https://github.com/go-ping/ping.git
synced 2025-06-28 15:06:55 +00:00
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:
parent
5f9dc3248b
commit
265e7c64b3
19
ping.go
19
ping.go
@ -77,11 +77,12 @@ var (
|
|||||||
func New(addr string) *Pinger {
|
func New(addr string) *Pinger {
|
||||||
r := rand.New(rand.NewSource(time.Now().UnixNano()))
|
r := rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||||
return &Pinger{
|
return &Pinger{
|
||||||
Count: -1,
|
Count: -1,
|
||||||
Interval: time.Second,
|
Interval: time.Second,
|
||||||
Size: timeSliceLength,
|
RecordRtts: true,
|
||||||
Timeout: time.Second * 100000,
|
Size: timeSliceLength,
|
||||||
Tracker: r.Int63n(math.MaxInt64),
|
Timeout: time.Second * 100000,
|
||||||
|
Tracker: r.Int63n(math.MaxInt64),
|
||||||
|
|
||||||
addr: addr,
|
addr: addr,
|
||||||
done: make(chan bool),
|
done: make(chan bool),
|
||||||
@ -122,6 +123,10 @@ type Pinger struct {
|
|||||||
// Number of packets received
|
// Number of packets received
|
||||||
PacketsRecv int
|
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 is all of the Rtts
|
||||||
rtts []time.Duration
|
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)
|
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
|
handler := p.OnRecv
|
||||||
if handler != nil {
|
if handler != nil {
|
||||||
handler(outPkt)
|
handler(outPkt)
|
||||||
|
Loading…
Reference in New Issue
Block a user