TYPE = "_motion._tcp.local."
NAME = "_yyyyXXXX." + TYPE
PORT = 4321
zeroconf = Zeroconf()
def reg_srv():
socket_addr = socket.gethostbyname(socket.gethostname())
info = ServiceInfo(TYPE,
NAME,
socket.inet_aton(socket_addr), PORT, 0, 0,
{"desc":"HOME Bonjour test"})
zeroconf.register_service(info)
print("broadcasting: " + socket_addr + " :" + str(PORT))
def main():
reg_srv()
print("listening on 4321 ...\n")
reactor.listenTCP(4321, MotionServiceFactory())
reactor.run()
print("closing zeroconf")
zeroconf.close()
when I called main() twice, it will crash:
motion_server.py in reg_srv()
25
26
---> 27 zeroconf.register_service(info)
28
29 print("broadcasting: " + socket_addr + " :" + str(PORT))
/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/zeroconf-0.17.4-py3.4.egg/zeroconf.py in register_service(self, info, ttl)
1430 information for that service. The name of the service may be
1431 changed if needed to make it unique on the network."""
-> 1432 self.check_service(info)
1433 self.services[info.name.lower()] = info
1434 if info.type in self.servicetypes:
/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/zeroconf-0.17.4-py3.4.egg/zeroconf.py in check_service(self, info)
1546 out.add_authorative_answer(DNSPointer(info.type, _TYPE_PTR,
1547 _CLASS_IN, _DNS_TTL, info.name))
-> 1548 self.send(out)
1549 i += 1
1550 next_time += _CHECK_TIME
/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/zeroconf-0.17.4-py3.4.egg/zeroconf.py in send(self, out, addr, port)
1666 log.debug('Sending %r as %r...', out, packet)
1667 for s in self._respond_sockets:
-> 1668 bytes_sent = s.sendto(packet, 0, (addr, port))
1669 if bytes_sent != len(packet):
1670 raise Error(
OSError: [Errno 9] Bad file descriptor
when I called main() twice, it will crash: