Download Install Tutorial Docs FAQ Tools WikiLicense Team IRC Planet Involvement Shop Book

Changeset 2230

Show
Ignore:
Timestamp:
04/01/09 11:09:03
Author:
klarson
Message:

Changed to socket error code instead of message, backport of http://cherrypy.org/ticket/860.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/cherrypy-3.0.x/cherrypy/wsgiserver/__init__.py

    r1843 r2230  
    6666 
    6767import errno 
     68 
     69socket_error_eintr = plat_specific_errors("EINTR", "WSAEINTR") 
     70 
    6871socket_errors_to_ignore = [] 
    6972# Not all of these names will be defined for every platform. 
     
    7174          "EHOSTDOWN", "EHOSTUNREACH", 
    7275          "WSAECONNABORTED", "WSAECONNREFUSED", "WSAECONNRESET", 
    73           "WSAENETRESET", "WSAETIMEDOUT"): 
     76          "WSAENETRESET", "WSAETIMEDOUT", "EBADF", "WSAEBADF", 
     77          "ENOTSOCK", "WSAENOTSOCK"): 
    7478    if _ in dir(errno): 
    7579        socket_errors_to_ignore.append(getattr(errno, _)) 
     
    7781socket_errors_to_ignore = dict.fromkeys(socket_errors_to_ignore).keys() 
    7882socket_errors_to_ignore.append("timed out") 
     83 
     84socket_errors_nonblocking = plat_specific_errors( 
     85        'EAGAIN', 'EWOULDBLOCK', 'WSAEWOULDBLOCK') 
    7986 
    8087comma_separated_headers = ['ACCEPT', 'ACCEPT-CHARSET', 'ACCEPT-ENCODING', 
     
    907914            return 
    908915        except socket.error, x: 
    909             msg = x.args[1] 
    910             if msg in ("Bad file descriptor", "Socket operation on non-socket"): 
     916            if x.args[0] in socket_error_eintr: 
     917                # I *think* this is right. EINTR should occur when a signal 
     918                # is received during the accept() call; all docs say retry 
     919                # the call, and I *think* I'm reading it right that Python 
     920                # will then go ahead and poll for and handle the signal 
     921                # elsewhere. See http://www.cherrypy.org/ticket/707. 
     922                return 
     923            if x.args[0] in socket_errors_nonblocking: 
     924                # Just try again. See http://www.cherrypy.org/ticket/479. 
     925                return 
     926            if x.args[0] in socket_errors_to_ignore: 
    911927                # Our socket was closed. 
    912                 return 
    913             if msg == "Resource temporarily unavailable": 
    914                 # Just try again. See http://www.cherrypy.org/ticket/479. 
     928                # See http://www.cherrypy.org/ticket/686. 
    915929                return 
    916930            raise 
     
    937951                    host, port = sock.getsockname()[:2] 
    938952                except socket.error, x: 
    939                     if x.args[1] != "Bad file descriptor": 
     953                    if x.args[0] in socket_errors_to_ignore: 
     954                        # Changed to use error code and not message 
     955                        # See http://www.cherrypy.org/ticket/860. 
    940956                        raise 
    941957                else: 

Hosted by WebFaction

Log in as guest/cpguest to create tickets