Esempio n. 1
0
class ConnectHandler(object):
    def __init__(self, addr, requestor):
        self._requestor = requestor
        self._reactor = Reactor()
        self._addr = addr

        try:
            self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self._socket.setblocking(0)
            self._socket.connect(addr)
        except socket.error:
            err = self._socket.getsockopt(socket.SOL_SOCKET, socket.SO_ERROR)
            if err != 0 and err != errno.EINPROGRESS:
                self._socket.close()
                logger.debug("Connection failed: {0}\n".format(err))
                requestor.connection_failed(addr)
                return

        self._reactor.register_for_write_events(self)

    def stream(self):
        return self._socket

    def write_event(self):
        self._reactor.unregister_for_write_events(self)

        err = self._socket.getsockopt(socket.SOL_SOCKET, socket.SO_ERROR)
        if err == 0:
            logger.info("Connection established with {0}"
                        .format(str(self._addr)))
            self._requestor.connection_complete(self._addr, self._socket)
        elif err != 0 and err != errno.EINPROGRESS:
            logger.info("Connection establishment failed with {0}"
                        .format(str(self._addr)))
            self._requestor.connection_failed(self._addr)
Esempio n. 2
0
class ConnectHandler(object):
    def __init__(self, addr, requestor):
        self._requestor = requestor
        self._reactor = Reactor()
        self._addr = addr

        try:
            self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self._socket.setblocking(0)
            self._socket.connect(addr)
        except socket.error:
            err = self._socket.getsockopt(socket.SOL_SOCKET, socket.SO_ERROR)
            if err != 0 and err != errno.EINPROGRESS:
                self._socket.close()
                logger.debug("Connection failed: {0}\n".format(err))
                requestor.connection_failed(addr)
                return

        self._reactor.register_for_write_events(self)

    def stream(self):
        return self._socket

    def write_event(self):
        self._reactor.unregister_for_write_events(self)

        err = self._socket.getsockopt(socket.SOL_SOCKET, socket.SO_ERROR)
        if err == 0:
            logger.info("Connection established with {0}".format(
                str(self._addr)))
            self._requestor.connection_complete(self._addr, self._socket)
        elif err != 0 and err != errno.EINPROGRESS:
            logger.info("Connection establishment failed with {0}".format(
                str(self._addr)))
            self._requestor.connection_failed(self._addr)
class SocketReaderWriter(object):
    def __init__(self, sock):
        self._reactor = Reactor()
        self._receiver = None
        self._output = []
        self._socket = sock
        self._reactor.register_for_read_events(self)

    def stream(self):
        return self._socket

    def stop(self):
        self._reactor.unregister_for_read_events(self)
        self._reactor.unregister_for_write_events(self)

    def set_receiver(self, receiver):
        self._receiver = receiver
    
    def unset_receiver(self):
        self._receiver = None

    def read_event(self):
        if self._receiver:
            view, size = self._receiver.get_rx_buffer()

            try:
                num = self._socket.recv_into(view, size)
                if num > 0:
                    self._receiver.rx_bytes(num)
                else:
                    if self._receiver:
                        self._receiver.connection_lost()
            except socket.error as err:
                logger.info("Socket Error {}".format(err))
                self._receiver.connection_lost()


    def write_event(self):
        if self._output == []:
            self._reactor.unregister_for_write_events(self)
        else:
            while self._output != []:
                num = self._socket.send(self._output[0])

                if num == len(self._output[0]):
                    del self._output[0]
                else:
                    self._output[0] = self._output[0][num:]
                    break

    def tx_bytes(self, bytestr):
        self._output.append(bytestr) 
        if len(self._output) == 1:
            self._reactor.register_for_write_events(self)
Esempio n. 4
0
class SocketReaderWriter(object):
    def __init__(self, sock):
        self._reactor = Reactor()
        self._receiver = None
        self._output = []
        self._socket = sock
        self._reactor.register_for_read_events(self)

    def stream(self):
        return self._socket

    def stop(self):
        self._reactor.unregister_for_read_events(self)
        self._reactor.unregister_for_write_events(self)

    def set_receiver(self, receiver):
        self._receiver = receiver

    def unset_receiver(self):
        self._receiver = None

    def read_event(self):
        if self._receiver:
            view, size = self._receiver.get_rx_buffer()

            try:
                n = self._socket.recv_into(view, size)
                if n > 0:
                    self._receiver.rx_bytes(n)
                else:
                    if self._receiver:
                        self._receiver.connection_lost()
            except socket.error as err:
                logger.info("Socket Error {}".format(err))
                self._receiver.connection_lost()

    def write_event(self):
        if self._output == []:
            self._reactor.unregister_for_write_events(self)
        else:
            while self._output != []:
                n = self._socket.send(self._output[0])

                if n == len(self._output[0]):
                    del self._output[0]
                else:
                    self._output[0] = self._output[0][n:]
                    break

    def tx_bytes(self, bytestr):
        self._output.append(bytestr)
        if len(self._output) == 1:
            self._reactor.register_for_write_events(self)