Example #1
0
	def handleAccept(self, rc, evt):
		if self.disconnecting or self.disconnected:
			return False

		# possible errors:
		# (WSAEMFILE, WSAENOBUFS, WSAENFILE, WSAENOMEM, WSAECONNABORTED)
		if rc:
			log.msg("Could not accept new connection -- %s (%s)" %
					(errno.errorcode.get(rc, 'unknown error'), rc))
			return False
		else:
			evt.newskt.setsockopt(socket.SOL_SOCKET, SO_UPDATE_ACCEPT_CONTEXT,
								  struct.pack('I', self.socket.fileno()))
			family, lAddr, rAddr = _iocp.get_accept_addrs(evt.newskt.fileno(),
														  evt.buff)
			assert family == self.addressFamily

			protocol = self.factory.buildProtocol(
				address._ServerFactoryIPv4Address('TCP', rAddr[0], rAddr[1]))
			if protocol is None:
				evt.newskt.close()
			else:
				s = self.sessionno
				self.sessionno = s+1
				transport = Server(evt.newskt, protocol,
						address.IPv4Address('TCP', rAddr[0], rAddr[1], 'INET'),
						address.IPv4Address('TCP', lAddr[0], lAddr[1], 'INET'),
						s, self.reactor)
				protocol.makeConnection(transport)
			return True
Example #2
0
    def handleAccept(self, rc, evt):
        if self.disconnecting or self.disconnected:
            return False

        # possible errors:
        # (WSAEMFILE, WSAENOBUFS, WSAENFILE, WSAENOMEM, WSAECONNABORTED)
        if rc:
            log.msg("Could not accept new connection -- %s (%s)" %
                    (errno.errorcode.get(rc, 'unknown error'), rc))
            return False
        else:
            evt.newskt.setsockopt(socket.SOL_SOCKET, SO_UPDATE_ACCEPT_CONTEXT,
                                  struct.pack('I', self.socket.fileno()))
            family, lAddr, rAddr = _iocp.get_accept_addrs(
                evt.newskt.fileno(), evt.buff)
            assert family == self.addressFamily

            protocol = self.factory.buildProtocol(
                address._ServerFactoryIPv4Address('TCP', rAddr[0], rAddr[1]))
            if protocol is None:
                evt.newskt.close()
            else:
                s = self.sessionno
                self.sessionno = s + 1
                transport = Server(
                    evt.newskt, protocol,
                    address.IPv4Address('TCP', rAddr[0], rAddr[1], 'INET'),
                    address.IPv4Address('TCP', lAddr[0], lAddr[1], 'INET'), s,
                    self.reactor)
                protocol.makeConnection(transport)
            return True
Example #3
0
		log.msg("%s starting on %s" % (self.factory.__class__, self._realPortNumber))

		# The order of the next 6 lines is kind of bizarre.  If no one
		# can explain it, perhaps we should re-arrange them.
		self.factory.doStart()
		skt.listen(self.backlog)
		self.connected = True
		self.socket = skt
		self.fileno = self.socket.fileno
		self.numberAccepts = 100

		self.startReading()


	def _buildAddr(self, (host, port)):
		return address._ServerFactoryIPv4Address('TCP', host, port)


	def doRead(self):
		"""Called when my socket is ready for reading.

		This accepts a connection and calls self.protocol() to handle the
		wire-level protocol.
		"""
		try:
			if platformType == "posix":
				numAccepts = self.numberAccepts
			else:
				# win32 event loop breaks if we do more than one accept()
				# in an iteration of the event loop.
				numAccepts = 1
Example #4
0
        log.msg("%s starting on %s" %
                (self.factory.__class__, self._realPortNumber))

        # The order of the next 6 lines is kind of bizarre.  If no one
        # can explain it, perhaps we should re-arrange them.
        self.factory.doStart()
        skt.listen(self.backlog)
        self.connected = True
        self.socket = skt
        self.fileno = self.socket.fileno
        self.numberAccepts = 100

        self.startReading()

    def _buildAddr(self, (host, port)):
        return address._ServerFactoryIPv4Address('TCP', host, port)

    def doRead(self):
        """Called when my socket is ready for reading.

		This accepts a connection and calls self.protocol() to handle the
		wire-level protocol.
		"""
        try:
            if platformType == "posix":
                numAccepts = self.numberAccepts
            else:
                # win32 event loop breaks if we do more than one accept()
                # in an iteration of the event loop.
                numAccepts = 1
            for i in range(numAccepts):