bug fix:并发读写map问题;add:新增Stop()函数

This commit is contained in:
2024-11-28 18:36:19 +08:00
parent 5cb3c6d651
commit d58df54cd6
3 changed files with 28 additions and 4 deletions
+16 -4
View File
@@ -1,6 +1,7 @@
package libpcap
import (
"context"
"fmt"
"github.com/google/gopacket"
"github.com/google/gopacket/pcap"
@@ -12,12 +13,18 @@ type NetCatch struct {
sentence string
fn func(gopacket.Packet)
*pcap.Handle
ctx context.Context
stopFn context.CancelFunc
}
func (n *NetCatch) SetRecall(fn func(p gopacket.Packet)) {
n.fn = fn
}
func (n *NetCatch) Stop() {
n.stopFn()
}
func FindAllDevs() ([]pcap.Interface, error) {
return pcap.FindAllDevs()
}
@@ -45,6 +52,7 @@ func NewCatch(host string, sentence string) (*NetCatch, error) {
nc.host = host
nc.eth = eth
nc.sentence = sentence
nc.ctx, nc.stopFn = context.WithCancel(context.Background())
return nc, nil
}
@@ -68,10 +76,14 @@ func (n *NetCatch) Run() error {
return err
}
pks := gopacket.NewPacketSource(handle, handle.LinkType())
for packet := range pks.Packets() {
if n.fn != nil {
n.fn(packet)
for {
select {
case packet := <-pks.Packets():
if n.fn != nil {
n.fn(packet)
}
case <-n.ctx.Done():
return nil
}
}
return nil
}