summaryrefslogtreecommitdiff
path: root/guix
diff options
context:
space:
mode:
authorMathieu Othacehe <othacehe@gnu.org>2020-12-10 09:46:50 +0100
committerMathieu Othacehe <othacehe@gnu.org>2020-12-10 09:48:03 +0100
commit0faef871784f4f88e622dd36b492f020387f7a5e (patch)
tree4e327a5433d224e3e4f0d3662ff8485ae7be398b /guix
parent71dd1be597f320ee89ea68bac5e898d1f4026c7f (diff)
avahi: Ignore local services.
* guix/avahi.scm (avahi-browse-service-thread): Add "ignore-local?" argument and honor it.
Diffstat (limited to 'guix')
-rw-r--r--guix/avahi.scm9
1 files changed, 6 insertions, 3 deletions
diff --git a/guix/avahi.scm b/guix/avahi.scm
index 8a82fd3beb..aa90a5cdd4 100644
--- a/guix/avahi.scm
+++ b/guix/avahi.scm
@@ -92,6 +92,7 @@ when STOP-LOOP? procedure returns true."
(define* (avahi-browse-service-thread proc
#:key
types
+ (ignore-local? #t)
(family AF_INET)
(stop-loop? (const #f))
(timeout 100))
@@ -116,7 +117,9 @@ when STOP-LOOP? procedure returns true."
;; Add the service if the host is unknown. This means that if a
;; service is available on multiple network interfaces for a single
;; host, only the first interface found will be considered.
- (unless (hash-ref %known-hosts service-name)
+ (unless (or (hash-ref %known-hosts service-name)
+ (and ignore-local?
+ (member lookup-result-flag/local flags)))
(let* ((address (inet-ntop family address))
(local-address (interface->ip-address interface))
(service* (avahi-service
@@ -144,8 +147,8 @@ when STOP-LOOP? procedure returns true."
((eq? event browser-event/remove)
(let ((service (hash-ref %known-hosts service-name)))
(when service
- (proc 'remove-service service)
- (hash-remove! %known-hosts service-name))))))
+ (proc 'remove-service service)
+ (hash-remove! %known-hosts service-name))))))
(define client-callback
(lambda (client state)