fix(qol): try to fix the code hanging problem
This commit is contained in:
@@ -32,7 +32,7 @@ func NewPacketCapture(iface, outputPath string) (*PacketCapture, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Open in append mode
|
// Open in append mode
|
||||||
file, err := os.OpenFile(outputPath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
|
file, err := os.OpenFile(outputPath, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
handle.Close()
|
handle.Close()
|
||||||
return nil, fmt.Errorf("create/open pcap file: %w", err)
|
return nil, fmt.Errorf("create/open pcap file: %w", err)
|
||||||
@@ -63,6 +63,8 @@ func (pc *PacketCapture) Start(ctx context.Context) error {
|
|||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
|
case <-ctx.Done():
|
||||||
|
return
|
||||||
case pkt, ok := <-pktCh:
|
case pkt, ok := <-pktCh:
|
||||||
if !ok {
|
if !ok {
|
||||||
return
|
return
|
||||||
@@ -75,8 +77,6 @@ func (pc *PacketCapture) Start(ctx context.Context) error {
|
|||||||
}
|
}
|
||||||
pc.mu.Unlock()
|
pc.mu.Unlock()
|
||||||
}
|
}
|
||||||
case <-ctx.Done():
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ func (r *MeasurementRunner) Run() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, upstream := range r.config.Servers {
|
for _, upstream := range r.config.Servers {
|
||||||
if err := r.runMeasurement(upstream, domains, qType); err != nil {
|
if err := r.runPerUpstream(upstream, domains, qType); err != nil {
|
||||||
fmt.Fprintf(os.Stderr, "error on server %s: %v\n", upstream, err)
|
fmt.Fprintf(os.Stderr, "error on server %s: %v\n", upstream, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -68,7 +68,16 @@ func (r *MeasurementRunner) Run() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *MeasurementRunner) runMeasurement(upstream string, domains []string, qType uint16) error {
|
func (r *MeasurementRunner) setupDNSClient(upstream string) (client.DNSClient, error) {
|
||||||
|
opts := client.Options{
|
||||||
|
DNSSEC: r.config.DNSSEC,
|
||||||
|
AuthoritativeDNSSEC: r.config.AuthoritativeDNSSEC,
|
||||||
|
KeepAlive: r.config.KeepAlive,
|
||||||
|
}
|
||||||
|
return client.New(upstream, opts)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *MeasurementRunner) runPerUpstream(upstream string, domains []string, qType uint16) error {
|
||||||
// Setup DNS client
|
// Setup DNS client
|
||||||
dnsClient, err := r.setupDNSClient(upstream)
|
dnsClient, err := r.setupDNSClient(upstream)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -112,21 +121,11 @@ func (r *MeasurementRunner) runMeasurement(upstream string, domains []string, qT
|
|||||||
return r.runQueries(dnsClient, upstream, domains, qType, writer, packetCapture)
|
return r.runQueries(dnsClient, upstream, domains, qType, writer, packetCapture)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *MeasurementRunner) setupDNSClient(upstream string) (client.DNSClient, error) {
|
|
||||||
opts := client.Options{
|
|
||||||
DNSSEC: r.config.DNSSEC,
|
|
||||||
AuthoritativeDNSSEC: r.config.AuthoritativeDNSSEC,
|
|
||||||
KeepAlive: r.config.KeepAlive,
|
|
||||||
}
|
|
||||||
return client.New(upstream, opts)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *MeasurementRunner) runQueries(dnsClient client.DNSClient, upstream string,
|
func (r *MeasurementRunner) runQueries(dnsClient client.DNSClient, upstream string,
|
||||||
domains []string, qType uint16, writer *results.MetricsWriter,
|
domains []string, qType uint16, writer *results.MetricsWriter,
|
||||||
packetCapture *capture.PacketCapture) error {
|
packetCapture *capture.PacketCapture) error {
|
||||||
|
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
if err := packetCapture.Start(ctx); err != nil {
|
if err := packetCapture.Start(ctx); err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -163,6 +162,8 @@ func (r *MeasurementRunner) runQueries(dnsClient client.DNSClient, upstream stri
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cancel()
|
||||||
|
|
||||||
time.Sleep(100 * time.Millisecond)
|
time.Sleep(100 * time.Millisecond)
|
||||||
|
|
||||||
if err := packetCapture.GetError(); err != nil {
|
if err := packetCapture.GetError(); err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user