From cbc871b83ffce5d2909e0455069ec776045069b3 Mon Sep 17 00:00:00 2001 From: Leonid Bugaev Date: Wed, 11 May 2016 20:08:20 +0500 Subject: [PATCH] Improve listening on all interfaces for complex environments If one interface is failed it should not fail whole program --- raw_socket_listener/listener.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/raw_socket_listener/listener.go b/raw_socket_listener/listener.go index 54a02ef..e3db57f 100644 --- a/raw_socket_listener/listener.go +++ b/raw_socket_listener/listener.go @@ -273,12 +273,19 @@ func (t *Listener) readPcap() { go func(device pcap.Interface) { handle, err := pcap.OpenLive(device.Name, 65536, true, t.messageExpire) if err != nil { - log.Fatal(err) + log.Println("Pcap Error while opening device", device.Name, err) + wg.Done() + return } defer handle.Close() - if err := handle.SetBPFFilter("tcp and port " + strconv.Itoa(int(t.port))); err != nil { - log.Fatal(err) + bpf := "port " + strconv.Itoa(int(t.port)) + + // log.Println("Applying bpf programm:", bpf, " Device:", device.Name) + if err := handle.SetBPFFilter(bpf); err != nil { + log.Println("BPF filter error:", err, "Device:", device.Name) + wg.Done() + return } source := gopacket.NewPacketSource(handle, handle.LinkType())