1
0
mirror of https://github.com/taigrr/go-fastping synced 2025-01-18 05:03:15 -08:00
Matt Jibson f2eec8c939 Allow shutdown after timeout
If a timeout has occurred, the send to recv in recvICMP would block forever
because no goroutine was receiving on that channel anymore. This leaves
behind 2 goroutines for each timeout: 1 trying to send an recv, and another
waiting for the wait group. Instead, used a buffered channel so that the
sender can send even with no listener. This cleans up the goroutines and
collects the channel.
2014-11-25 22:48:21 +09:00
2013-09-06 00:31:36 +09:00
2014-11-25 22:48:21 +09:00
2013-09-06 00:30:54 +09:00
2013-09-05 07:52:42 -07:00
2014-10-16 21:08:44 +09:00

go-fastping

go-fastping is a Go language's ICMP ping library inspired by AnyEvent::FastPing Perl module to send ICMP ECHO REQUEST packets quickly. Original Perl module is available at http://search.cpan.org/~mlehmann/AnyEvent-FastPing-2.01/

It hasn't been fully implemented original functions yet.

GoDoc

Installation

Install and update this go package with go get -u github.com/tatsushid/go-fastping

Examples

Import this package and write

p := fastping.NewPinger()
ra, err := net.ResolveIPAddr("ip4:icmp", os.Args[1])
if err != nil {
	fmt.Println(err)
	os.Exit(1)
}
p.AddIPAddr(ra)
p.OnRecv = func(addr *net.IPAddr, rtt time.Duration) {
	fmt.Printf("IP Addr: %s receive, RTT: %v\n", addr.String(), rtt)
}
p.OnIdle = func() {
	fmt.Println("finish")
}
err = p.Run()
if err != nil {
	fmt.Println(err)
}

It sends an ICMP packet and wait a response. If it receives a response, it calls "receive" callback. After that, MaxRTT time passed, it calls "idle" callback. For more detail, refer godoc and If you need more example, please see "cmd/ping/ping.go".

License

go-fastping is under MIT License. See the LICENSE file for details.

Description
ICMP ping library for Go inspired by AnyEvent::FastPing Perl module
Readme 110 KiB
Languages
Go 100%