MCPcopy
hub / github.com/google/gopacket / packetsToChannel

Method packetsToChannel

packet.go:815–845  ·  view source on GitHub ↗

packetsToChannel reads in all packets from the packet source and sends them to the given channel. This routine terminates when a non-temporary error is returned by NextPacket().

()

Source from the content-addressed store, hash-verified

813// to the given channel. This routine terminates when a non-temporary error
814// is returned by NextPacket().
815func (p *PacketSource) packetsToChannel() {
816 defer close(p.c)
817 for {
818 packet, err := p.NextPacket()
819 if err == nil {
820 p.c <- packet
821 continue
822 }
823
824 // Immediately retry for temporary network errors
825 if nerr, ok := err.(net.Error); ok && nerr.Temporary() {
826 continue
827 }
828
829 // Immediately retry for EAGAIN
830 if err == syscall.EAGAIN {
831 continue
832 }
833
834 // Immediately break for known unrecoverable errors
835 if err == io.EOF || err == io.ErrUnexpectedEOF ||
836 err == io.ErrNoProgress || err == io.ErrClosedPipe || err == io.ErrShortBuffer ||
837 err == syscall.EBADF ||
838 strings.Contains(err.Error(), "use of closed file") {
839 break
840 }
841
842 // Sleep briefly and try again
843 time.Sleep(time.Millisecond * time.Duration(5))
844 }
845}
846
847// Packets returns a channel of packets, allowing easy iterating over
848// packets. Packets will be asynchronously read in from the underlying

Callers 1

PacketsMethod · 0.95

Calls 3

NextPacketMethod · 0.95
ContainsMethod · 0.65
ErrorMethod · 0.65

Tested by

no test coverage detected