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

Changeset 849

Show
Ignore:
Timestamp:
11/28/05 13:46:57
Author:
fumanchu
Message:

Fix for #388 (problems when using "" for host on Unix).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/cherrypy/_cphttpserver.py

    r843 r849  
    173173            self.server_address = (host, port) 
    174174             
    175             # Get the correct address family for our host (allows IPv6 addresses) 
    176             for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, 
    177                                           socket.SOCK_STREAM): 
    178                 af, socktype, proto, canonname, sa = res 
    179                 self.address_family = af 
    180                 self.socket_type = socktype 
    181                 try: 
    182                     self.socket = socket.socket(af, socktype, proto) 
    183                     self.server_bind() 
    184                 except socket.error, msg: 
    185                     if self.socket: 
    186                         self.socket.close() 
    187                     self.socket = None 
    188                     continue 
    189                 break 
    190              
    191             if not self.socket: 
    192                 raise socket.error, msg 
     175            try: 
     176                info = socket.getaddrinfo(host, port, socket.AF_UNSPEC, 
     177                                          socket.SOCK_STREAM) 
     178            except socket.gaierror: 
     179                # Probably a DNS issue. 
     180                # Must...refuse...temptation..to..guess... 
     181                self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
     182                self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
     183                self.socket.bind(self.server_address) 
     184            else: 
     185                # Get the correct address family for our host (allows IPv6 addresses) 
     186                for res in info: 
     187                    af, socktype, proto, canonname, sa = res 
     188                    self.address_family = af 
     189                    self.socket_type = socktype 
     190                    try: 
     191                        self.socket = socket.socket(af, socktype, proto) 
     192                        self.server_bind() 
     193                    except socket.error, msg: 
     194                        if self.socket: 
     195                            self.socket.close() 
     196                        self.socket = None 
     197                        continue 
     198                    break 
     199                if not self.socket: 
     200                    raise socket.error, msg 
    193201         
    194202        self.server_activate() 
  • trunk/cherrypy/_cpwsgiserver.py

    r847 r849  
    230230            # Get the correct address family for our host (allows IPv6 addresses) 
    231231            host, port = self.bind_addr 
    232             for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, 
    233                                           socket.SOCK_STREAM): 
    234                 af, socktype, proto, canonname, sa = res 
    235                 try: 
    236                     self.socket = socket.socket(af, socktype, proto) 
    237                     self.socket.setsockopt(socket.SOL_SOCKET, 
    238                                            socket.SO_REUSEADDR, 1) 
    239                     self.socket.bind(self.bind_addr) 
    240                 except socket.error, msg: 
    241                     if self.socket: 
    242                         self.socket.close() 
    243                     self.socket = None 
    244                     continue 
    245                 break 
    246              
    247             if not self.socket: 
    248                 raise socket.error, msg 
     232            try: 
     233                info = socket.getaddrinfo(host, port, socket.AF_UNSPEC, 
     234                                          socket.SOCK_STREAM) 
     235            except socket.gaierror: 
     236                # Probably a DNS issue. Assume IPv4. 
     237                self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
     238                self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
     239                self.socket.bind(self.bind_addr) 
     240            else: 
     241                for res in info: 
     242                    af, socktype, proto, canonname, sa = res 
     243                    try: 
     244                        self.socket = socket.socket(af, socktype, proto) 
     245                        self.socket.setsockopt(socket.SOL_SOCKET, 
     246                                               socket.SO_REUSEADDR, 1) 
     247                        self.socket.bind(self.bind_addr) 
     248                    except socket.error, msg: 
     249                        if self.socket: 
     250                            self.socket.close() 
     251                        self.socket = None 
     252                        continue 
     253                    break 
     254                if not self.socket: 
     255                    raise socket.error, msg 
    249256         
    250257        # Timeout so KeyboardInterrupt can be caught on Win32 

Hosted by WebFaction

Log in as guest/cpguest to create tickets