module DNSSD
Constants
- VERSION
The version of DNSSD you're using.
Public Class Methods
Registers socket with DNSSD as name. If
service is omitted it is looked up using getservbyport and the
ports address. text_record, flags and
interface are used as in register.
Returns the Service created by registering the socket. The Service will automatically be shut down when close or close_read is called on the socket.
Only for bound TCP and UDP sockets.
# File lib/dnssd.rb, line 29 def self.announce(socket, name, service = nil, text_record = nil, flags = 0, interface = DNSSD::InterfaceAny, &block) _, port, = socket.addr raise ArgumentError, 'socket not bound' if port == 0 service ||= DNSSD.getservbyport port proto = case socket when TCPSocket then 'tcp' when UDPSocket then 'udp' else raise ArgumentError, 'tcp or udp sockets only' end type = "_#{service}._#{proto}" registrar = register(name, type, nil, port, text_record, flags, interface, &block) socket.instance_variable_set :@registrar, registrar def socket.close result = super @registrar.stop return result end def socket.close_read result = super @registrar.stop return result end registrar end
Asynchronous version of DNSSD::Service#browse
# File lib/dnssd.rb, line 68 def self.browse(type, domain = nil, flags = 0, interface = DNSSD::InterfaceAny, &block) service = DNSSD::Service.new Thread.start do run(service, :browse, type, domain, flags, interface, &block) end service end
Synchronous version of DNSSD::Service#browse
# File lib/dnssd.rb, line 82 def self.browse!(type, domain = nil, flags = 0, interface = DNSSD::InterfaceAny, &block) service = DNSSD::Service.new run(service, :browse, type, domain, flags, interface, &block) end
Asynchronous version of DNSSD::Service#enumerate_domains
# File lib/dnssd.rb, line 92 def self.enumerate_domains(flags = DNSSD::Flags::BrowseDomains, interface = DNSSD::InterfaceAny, &block) service = DNSSD::Service.new Thread.start do run(service, :enumerate_domains, flags, interface, &block) end service end
Synchronous version of DNSSD::Service#enumerate_domains
# File lib/dnssd.rb, line 106 def self.enumerate_domains!(flags = DNSSD::Flags::BrowseDomains, interface = DNSSD::InterfaceAny, &block) service = DNSSD::Service.new run(service, :enumerate_domains, flags, interface, &block) end
Asynchronous version of DNSSD::Service#register
# File lib/dnssd.rb, line 116 def self.register(name, type, domain, port, text_record = nil, flags = 0, interface = DNSSD::InterfaceAny, &block) service = DNSSD::Service.new if block_given? then Thread.start do run(service, :register, name, type, domain, port, nil, text_record, flags, interface, &block) end else service.register name, type, domain, port, nil, text_record, flags, interface end service end
Synchronous version of DNSSD::Service#register
# File lib/dnssd.rb, line 136 def self.register!(name, type, domain, port, text_record = nil, flags = 0, interface = DNSSD::InterfaceAny, &block) service = DNSSD::Service.new if block_given? then run(service, :register, name, type, domain, port, nil, text_record, flags, interface, &block) else service.register name, type, domain, port, nil, text_record, flags, interface end service end
Asynchronous version of DNSSD::Service#resolve
# File lib/dnssd.rb, line 154 def self.resolve(*args, &block) service = DNSSD::Service.new Thread.start do run(service, :resolve, *args, &block) end service end
Synchronous version of DNSSD::Service#resolve
# File lib/dnssd.rb, line 167 def self.resolve!(*args, &block) service = DNSSD::Service.new run(service, :resolve, *args, &block) end
Dispatches args and block to method
on service and ensures service is shut down after
use.
# File lib/dnssd.rb, line 177 def self.run(service, method, *args, &block) service.send(method, *args, &block) service ensure service.stop unless service.stopped? end