Switch "exn?" to "exn:fail?" in a few important spots, to avoid catching SIGINT
This commit is contained in:
parent
43a6f52cd8
commit
58b8d9c35b
|
@ -92,8 +92,9 @@
|
||||||
[(udp-packet source (== s) body)
|
[(udp-packet source (== s) body)
|
||||||
(transition w
|
(transition w
|
||||||
(send-message
|
(send-message
|
||||||
(with-handlers ((exn? (lambda (e) (bad-dns-packet body source s
|
(with-handlers ((exn:fail? (lambda (e)
|
||||||
'unparseable))))
|
(bad-dns-packet body source s
|
||||||
|
'unparseable))))
|
||||||
(define message (packet->dns-message body))
|
(define message (packet->dns-message body))
|
||||||
(case (dns-message-direction message)
|
(case (dns-message-direction message)
|
||||||
((request) (dns-request message source))
|
((request) (dns-request message source))
|
||||||
|
@ -106,9 +107,10 @@
|
||||||
(message-handlers w
|
(message-handlers w
|
||||||
[(dns-reply message sink)
|
[(dns-reply message sink)
|
||||||
(transition w
|
(transition w
|
||||||
(with-handlers ((exn? (lambda (e) (send-message
|
(with-handlers ((exn:fail? (lambda (e)
|
||||||
(bad-dns-packet message s sink
|
(send-message
|
||||||
'unencodable)))))
|
(bad-dns-packet message s sink
|
||||||
|
'unencodable)))))
|
||||||
(send-meta-message
|
(send-meta-message
|
||||||
(udp-packet s sink (dns-message->packet message)))))]))))
|
(udp-packet s sink (dns-message->packet message)))))]))))
|
||||||
|
|
||||||
|
|
23
driver.rkt
23
driver.rkt
|
@ -71,12 +71,11 @@
|
||||||
(udp-bind! s #f port-number)
|
(udp-bind! s #f port-number)
|
||||||
|
|
||||||
(define (service-loop)
|
(define (service-loop)
|
||||||
(with-handlers ((exn:break? (lambda (e) (raise e)))
|
(with-handlers ((exn:fail? (lambda (e)
|
||||||
(exn? (lambda (e)
|
(display "Error in DNS service handler:") (newline)
|
||||||
(display "Error in DNS service handler:") (newline)
|
(write e)
|
||||||
(write e)
|
(newline)
|
||||||
(newline)
|
(newline))))
|
||||||
(newline))))
|
|
||||||
(read-and-process-request))
|
(read-and-process-request))
|
||||||
(service-loop))
|
(service-loop))
|
||||||
|
|
||||||
|
@ -104,9 +103,9 @@
|
||||||
(flush-output)
|
(flush-output)
|
||||||
|
|
||||||
(define request-message
|
(define request-message
|
||||||
(with-handlers ((exn? (lambda (e)
|
(with-handlers ((exn:fail? (lambda (e)
|
||||||
(send-error 'format-error)
|
(send-error 'format-error)
|
||||||
(raise e))))
|
(raise e))))
|
||||||
(packet->dns-message (subbytes buffer 0 packet-length))))
|
(packet->dns-message (subbytes buffer 0 packet-length))))
|
||||||
|
|
||||||
;;(write request-message) (newline)
|
;;(write request-message) (newline)
|
||||||
|
@ -126,9 +125,9 @@
|
||||||
(rr-set->list additional)))
|
(rr-set->list additional)))
|
||||||
|
|
||||||
(define reply-packet
|
(define reply-packet
|
||||||
(with-handlers ((exn? (lambda (e)
|
(with-handlers ((exn:fail? (lambda (e)
|
||||||
(send-error 'server-failure)
|
(send-error 'server-failure)
|
||||||
(raise e))))
|
(raise e))))
|
||||||
;; TODO: check opcode and direction in request
|
;; TODO: check opcode and direction in request
|
||||||
(define questions (dns-message-questions request-message))
|
(define questions (dns-message-questions request-message))
|
||||||
(if (null? questions)
|
(if (null? questions)
|
||||||
|
|
|
@ -102,7 +102,7 @@
|
||||||
(define (udp-packet->message packet)
|
(define (udp-packet->message packet)
|
||||||
(match-define (udp-packet body host port) packet)
|
(match-define (udp-packet body host port) packet)
|
||||||
(define a (address host port))
|
(define a (address host port))
|
||||||
(with-handlers ((exn? (lambda (e) (bad-dns-packet body a #f 'unparseable))))
|
(with-handlers ((exn:fail? (lambda (e) (bad-dns-packet body a #f 'unparseable))))
|
||||||
(define message (packet->dns-message body))
|
(define message (packet->dns-message body))
|
||||||
(world-message message a #f)))
|
(world-message message a #f)))
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
|
|
||||||
(define (udp-packet->dns-message packet)
|
(define (udp-packet->dns-message packet)
|
||||||
(match-define (udp-packet body host port) packet)
|
(match-define (udp-packet body host port) packet)
|
||||||
(with-handlers ((exn? (lambda (e) (bad-dns-packet body host port 'unparseable))))
|
(with-handlers ((exn:fail? (lambda (e) (bad-dns-packet body host port 'unparseable))))
|
||||||
(define message (packet->dns-message body))
|
(define message (packet->dns-message body))
|
||||||
(case (dns-message-direction message)
|
(case (dns-message-direction message)
|
||||||
((request) (dns-request message host port))
|
((request) (dns-request message host port))
|
||||||
|
|
Loading…
Reference in New Issue