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
|
||||
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 {
|
||||
handle.Close()
|
||||
return nil, fmt.Errorf("create/open pcap file: %w", err)
|
||||
@@ -63,6 +63,8 @@ func (pc *PacketCapture) Start(ctx context.Context) error {
|
||||
go func() {
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return
|
||||
case pkt, ok := <-pktCh:
|
||||
if !ok {
|
||||
return
|
||||
@@ -75,8 +77,6 @@ func (pc *PacketCapture) Start(ctx context.Context) error {
|
||||
}
|
||||
pc.mu.Unlock()
|
||||
}
|
||||
case <-ctx.Done():
|
||||
return
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
@@ -60,7 +60,7 @@ func (r *MeasurementRunner) Run() error {
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
@@ -68,7 +68,16 @@ func (r *MeasurementRunner) Run() error {
|
||||
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
|
||||
dnsClient, err := r.setupDNSClient(upstream)
|
||||
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)
|
||||
}
|
||||
|
||||
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,
|
||||
domains []string, qType uint16, writer *results.MetricsWriter,
|
||||
packetCapture *capture.PacketCapture) error {
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
if err := packetCapture.Start(ctx); err != nil {
|
||||
return err
|
||||
@@ -163,6 +162,8 @@ func (r *MeasurementRunner) runQueries(dnsClient client.DNSClient, upstream stri
|
||||
}
|
||||
}
|
||||
|
||||
cancel()
|
||||
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
|
||||
if err := packetCapture.GetError(); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user