@@ -29,18 +29,20 @@ type httpRequestAndResponseStreamer struct {
2929 maxBodySize int64
3030}
3131
32- func (s * httpRequestAndResponseStreamer ) start ( ) {
32+ func (s * httpRequestAndResponseStreamer ) getHandleAndPacketsChannel () ( * pcap. Handle , <- chan gopacket. Packet ) {
3333 handle , err := pcap .OpenLive ("any" , 1600 , true , pcap .BlockForever )
3434 if err != nil {
3535 log .Fatal (err )
3636 }
37- defer handle .Close ()
38-
3937 err = handle .SetBPFFilter (s .bpfExpression )
4038 if err != nil {
4139 log .Fatal (err )
4240 }
41+ packetsChannel := gopacket .NewPacketSource (handle , handle .LinkType ()).Packets ()
42+ return handle , packetsChannel
43+ }
4344
45+ func (s * httpRequestAndResponseStreamer ) start () {
4446 assembler := tcpassembly .NewAssembler (
4547 tcpassembly .NewStreamPool (
4648 & bidirectionalStreamFactory {
@@ -50,11 +52,18 @@ func (s *httpRequestAndResponseStreamer) start() {
5052 },
5153 ),
5254 )
55+
56+ handler , packetsChannel := s .getHandleAndPacketsChannel ()
57+
5358 ticker := time .Tick (time .Minute )
54- packetsChannel := gopacket .NewPacketSource (handle , handle .LinkType ()).Packets ()
5559 for {
5660 select {
57- case packet := <- packetsChannel :
61+ case packet , ok := <- packetsChannel :
62+ if ! ok {
63+ slog .Warn ("Packet channel closed. Reinitializing..." )
64+ handler .Close ()
65+ handler , packetsChannel = s .getHandleAndPacketsChannel ()
66+ }
5867 if packet .NetworkLayer () == nil || packet .TransportLayer () == nil {
5968 continue
6069 }
0 commit comments