def scheduleInitRequest(self):
        if not self.deferred:
            return
        if self.initrequest_dcall:
            return

        def cb():
            self.initrequest_dcall = None

            try:
                p = heapq.heappop(self.heap)
            except IndexError:
                self.checkStatus()
                return

            p.inheap = False

            ad = Ad().setRawIPPort(p.ipp)

            packet = ['IQ']
            packet.append(ad.getRawIP())
            packet.append(struct.pack('!H', self.main.state.udp_port))

            self.main.logPacket("IQ -> %s:%d" % ad.getAddrTuple())

            packet = self.main.pk_enc.encrypt(''.join(packet))

            try:
                # Send from the alternate port
                self.transport.write(packet, ad.getAddrTuple())
            except (AttributeError, socket.error):
                # Socket got funky, let the timeouts take care of it.
                pass
            except RuntimeError:
                # Workaround for the Twisted infinte recursion bug
                pass
            else:
                self.schedulePeerContactTimeout(p)

            self.initrequest_dcall = reactor.callLater(0.05, cb)

        self.initrequest_dcall = reactor.callLater(0, cb)