101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
# File 'lib/zeroconf/utils.rb', line 101
def open_ipv6 saddr, port
sock = UDPSocket.new Socket::AF_INET6
sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_REUSEADDR, true)
sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_REUSEPORT, true)
sock.setsockopt(Socket::IPPROTO_IPV6, Socket::IPV6_MULTICAST_HOPS, true)
sock.setsockopt(Socket::IPPROTO_IPV6, Socket::IPV6_MULTICAST_LOOP, true)
s = IPAddr.new("ff02:0000:0000:0000:0000:00fb:0000:0000").hton
sock.setsockopt(Socket::IPPROTO_IPV6, Socket::IPV6_JOIN_GROUP, s)
sock.setsockopt(Socket::IPPROTO_IPV6, Socket::IPV6_MULTICAST_IF, IPAddr.new(saddr.ip_address).hton)
sock.bind saddr.ip_address, port
flags = sock.fcntl(Fcntl::F_GETFL, 0)
sock.fcntl(Fcntl::F_SETFL, Fcntl::O_NONBLOCK | flags)
sock
rescue SystemCallError
end
|