Beispiel #1
0
    def startReading(self, readCallback):
        """Start reading from the socket.  When data becomes available it will
        be passed to readCallback.  If there is already a read callback, it
        will be replaced.
        """

        if not self.isOpen():
            raise ValueError("Socket not connected")
        self.readCallback = readCallback
        eventloop.add_read_callback(self.socket, self.onReadReady)
        self.startReadTimeout()
Beispiel #2
0
    def startReading(self, readCallback):
        """Start reading from the socket.  When data becomes available it will
        be passed to readCallback.  If there is already a read callback, it
        will be replaced.
        """

        if not self.isOpen():
            raise ValueError("Socket not connected")
        self.readCallback = readCallback
        eventloop.add_read_callback(self.socket, self.onReadReady)
        self.startReadTimeout()
Beispiel #3
0
 def handleSocketError(self, code, msg, operation):
     if code in (socket.SSL_ERROR_WANT_READ, socket.SSL_ERROR_WANT_WRITE):
         if self.interruptedOperation is None:
             self.interruptedOperation = operation
         elif self.interruptedOperation != operation:
             signals.system.failed("When talking to the network", 
             details="socket error for the wrong SSL operation")
             self.close_connection()
             return
         eventloop.stop_handling_socket(self.socket)
         if code == socket.SSL_ERROR_WANT_READ:
             eventloop.add_read_callback(self.socket, self.onReadReady)
         else:
             eventloop.add_write_callback(self.socket, self.onWriteReady)
     elif code in (socket.SSL_ERROR_ZERO_RETURN, socket.SSL_ERROR_SSL,
             socket.SSL_ERROR_SYSCALL, socket.SSL_ERROR_EOF):
         self.handleEarlyClose(operation)
     else:
         super(AsyncSSLStream, self).handleSocketError(code, msg,
                 operation)
Beispiel #4
0
 def handleSocketError(self, code, msg, operation):
     if code in (socket.SSL_ERROR_WANT_READ, socket.SSL_ERROR_WANT_WRITE):
         if self.interruptedOperation is None:
             self.interruptedOperation = operation
         elif self.interruptedOperation != operation:
             signals.system.failed("When talking to the network", 
             details="socket error for the wrong SSL operation")
             self.close_connection()
             return
         eventloop.stop_handling_socket(self.socket)
         if code == socket.SSL_ERROR_WANT_READ:
             eventloop.add_read_callback(self.socket, self.onReadReady)
         else:
             eventloop.add_write_callback(self.socket, self.onWriteReady)
     elif code in (socket.SSL_ERROR_ZERO_RETURN, socket.SSL_ERROR_SSL,
             socket.SSL_ERROR_SYSCALL, socket.SSL_ERROR_EOF):
         self.handleEarlyClose(operation)
     else:
         super(AsyncSSLStream, self).handleSocketError(code, msg,
                 operation)
Beispiel #5
0
 def resumeNormalCallbacks(self):
     if self.readCallback is not None:
         eventloop.add_read_callback(self.socket, self.onReadReady)
     if len(self.toSend) != 0:
         eventloop.add_write_callback(self.socket, self.onWriteReady)
Beispiel #6
0
        try:
            self.socket = socket.socket(family, socket.SOCK_STREAM)
            self.socket.bind((host, port))
        except socket.error, e:
            trap_call(self, errback, ConnectionError(e[1]))
            return

        if self.socket.family == socket.AF_INET:
            (self.addr, self.port) = self.socket.getsockname()
        elif self.socket.family == socket.AF_INET6:
            (self.addr, self.port, self.flowinfo, self.scopeid) = self.socket.getsockname()
        else:
            raise ValueError("Unknown socket family: %s", self.socket.family)
        self.socket.listen(63)
        eventloop.add_read_callback(self.socket, finishAccept)

    def close_connection(self):
        if self.isOpen():
            eventloop.stop_handling_socket(self.socket)
            self.stopReadTimeout()
            self.socket.close()
            self.socket = None
        if self.connectionErrback is not None:
            error = NetworkError(_("Connection closed"))
            trap_call(self, self.connectionErrback, error)
            self.connectionErrback = None

    def isOpen(self):
        return self.socket is not None
Beispiel #7
0
 def resumeNormalCallbacks(self):
     if self.readCallback is not None:
         eventloop.add_read_callback(self.socket, self.onReadReady)
     if len(self.toSend) != 0:
         eventloop.add_write_callback(self.socket, self.onWriteReady)
Beispiel #8
0
        try:
            self.socket = socket.socket(family, socket.SOCK_STREAM)
            self.socket.bind((host, port))
        except socket.error, e:
            trap_call(self, errback, ConnectionError(e[1]))
            return

        if self.socket.family == socket.AF_INET:
            (self.addr, self.port) = self.socket.getsockname()
        elif self.socket.family == socket.AF_INET6:
            (self.addr, self.port, self.flowinfo,
             self.scopeid) = self.socket.getsockname()
        else:
            raise ValueError("Unknown socket family: %s", self.socket.family)
        self.socket.listen(63)
        eventloop.add_read_callback(self.socket, finishAccept)

    def close_connection(self):
        if self.isOpen():
            eventloop.stop_handling_socket(self.socket)
            self.stopReadTimeout()
            self.socket.close()
            self.socket = None
        if self.connectionErrback is not None:
            error = NetworkError(_("Connection closed"))
            trap_call(self, self.connectionErrback, error)
            self.connectionErrback = None

    def isOpen(self):
        return self.socket is not None