Skip to content

call register_service twice, it will crash #47

@sprhawk

Description

@sprhawk

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions