Changeset 965

Show
Ignore:
Timestamp:
12/29/07 14:08:13 (10 months ago)
Author:
alo
Message:

--

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • cherokee-admin/ng/pyscgi.py

    r961 r965  
    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):