Changeset 964

Show
Ignore:
Timestamp:
12/29/07 14:07:43 (9 months ago)
Author:
alo
Message:

--

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • cherokee-pyscgi/ChangeLog

    r928 r964  
     12007-12-29  Alvaro Lopez Ortega  <alvaro@alobbs.com> 
     2 
     3        * pyscgi/pyscgi.py: Fixed communication issue between the SCGI 
     4        application and the web server. The information follow could 
     5        fail because EAGAIN errors. It is fixed now. 
     6 
    172007-10-04  Alvaro Lopez Ortega  <alvaro@alobbs.com> 
    28 
  • cherokee-pyscgi/pyscgi/pyscgi.py

    r876 r964  
    3838import SocketServer 
    3939import traceback 
     40import errno 
    4041 
    41 __version__ = '1.1
     42__version__ = '1.2
    4243__author__  = 'Alvaro Lopez Ortega' 
    4344 
     
    4950        SocketServer.StreamRequestHandler.__init__ (self, request, client_address, server) 
    5051 
     52    def __safe_read (self, lenght): 
     53         while True:  
     54            try: 
     55                return self.rfile.read(lenght) 
     56            except OSError, e: 
     57                if e.errno == errno.EAGAIN: 
     58                    continue 
     59            except IOError, e: 
     60                if e.errno == errno.EAGAIN: 
     61                    continue 
     62            raise 
     63 
    5164    def __read_netstring_size (self): 
    5265        size = "" 
    5366        while 1: 
    54             c = self.rfile.read(1) 
     67            c = self.__safe_read(1) 
    5568            if c == ':': 
    5669                break 
     
    6477        size = self.__read_netstring_size() 
    6578        while size > 0: 
    66             s = self.rfile.read(size) 
     79            s = self.__safe_read(size) 
    6780            if not s: 
    6881                raise IOError, 'Malformed netstring' 
    6982            data += s 
    7083            size -= len(s) 
    71             if self.rfile.read(1) != ',': 
     84            if self.__safe_read(1) != ',': 
    7285                raise IOError, 'Missing netstring terminator' 
    7386        return data 
     
    8699            return 
    87100        length = int(self.env['CONTENT_LENGTH']) 
    88         self.post = self.rfile.read(length) 
     101        self.post = self.__safe_read(length) 
    89102 
    90103    def handle (self):