#lang racket/base ;; Network helpers used by UPnP and SSDP. (require racket/udp simple-log) (provide upnp-default-ipv4-address) (sl-def-log upnp-network) (define ssdp-multicast-address "239.255.255.250") (define ssdp-multicast-port 1900) ;; Return the local IPv4 address selected by the operating system for traffic ;; to the SSDP multicast destination. No datagram is transmitted. (define (upnp-default-ipv4-address) (let ([socket (udp-open-socket ssdp-multicast-address ssdp-multicast-port)]) (dynamic-wind void (lambda () (udp-connect! socket ssdp-multicast-address ssdp-multicast-port) (define-values (local-address local-port remote-address remote-port) (udp-addresses socket #t)) (dbg-upnp-network "Selected UPnP IPv4 address ~a for SSDP destination ~a:~a" local-address ssdp-multicast-address ssdp-multicast-port) local-address) (lambda () (udp-close socket)))))