示例#1
0
    def __init__(self, sock, autoCommit=False, bufferSize=8192):
        """Create stream.

        We get an extra `sock` argument, which is the socket which we'll
        stream output to (if we're streaming).
        """
        ASStreamOut.__init__(self, autoCommit, bufferSize)
        self._socket = sock
示例#2
0
 def doTransaction(self, env, input):
     """Process transaction."""
     requestDict = dict(format='CGI', environ=env, input=input)
     self.startRequest(requestDict)
     streamOut = ASStreamOut()
     self.dispatchRawRequest(requestDict, streamOut)
     try:
         self.processResponse(streamOut._buffer)
         self._sock.shutdown(2)
     except socket.error as e:
         if e[0] == errno.EPIPE:  # broken pipe
             return
         print '%5d  HTTPServer output error: %s' % (self._requestID, e)
     self.endRequest()
示例#3
0
    def flush(self):
        """Flush stream.

        Calls `ASStreamOut.ASStreamOut.flush`, and if that returns True
        (indicating the buffer is full enough) then we send data from
        the buffer out on the socket.
        """
        result = ASStreamOut.flush(self)
        if result:  # a true return value means we can send
            reslen = len(self._buffer)
            sent = 0
            bufferSize = self._bufferSize
            while sent < reslen:
                try:
                    sent += self._socket.send(
                        self._buffer[sent:sent+bufferSize])
                except socket.error as e:
                    if debug or e[0] not in self._ignoreErrnos:
                        print "StreamOut Error:", e
                    self._closed = True
                    raise ConnectionAbortedError
            self.pop(sent)