;; Doesn't currently work. I'm unable to join the multicast group to listen for messages. (defpackage :cl-mdns/publisher (:use :cl :cl-mdns/packet) (:local-nicknames (:nb :nibbles) (:f :fsocket))) (in-package :cl-mdns/publisher) (defvar *mdns-address* #(224 0 0 251)) (defvar *mdns-port* 5353) (defun publish () (f:with-poll (pc) (f:with-socket (sock :datagram) (let ((addr (f:make-sockaddr-in :addr *mdns-address* :port *mdns-port*)) (laddr (f:make-sockaddr-in :port *mdns-port*)) (buffer (make-array 512 :element-type '(unsigned-byte 8)))) ;; Prepare multicast socket (setf (f:socket-option sock :socket :reuseaddr) t) (f:socket-bind sock laddr) (f:multicast-join sock addr) ;; Register for polling - we don't want to waste compute time on active listening (f:poll-register pc (make-instance 'f:pollfd :fd sock :events (f:poll-events :pollin))) (loop (f:doevents (pollfd event) (f:poll pc) (case event (:pollin (multiple-value-bind (count saddr) (f:socket-recvfrom sock buffer) (format t "Recieved ~A from ~A, buffer: ~A" count saddr (subseq buffer 0 count)))) )))))))