tests/run-tests.py
changeset 30886 2aaa8bfc7bd9
parent 30716 3de9df6ee5bf
child 30896 b9116befa784
equal deleted inserted replaced
30885:564a96a56b73 30886:2aaa8bfc7bd9
   112 # For Windows support
   112 # For Windows support
   113 wifexited = getattr(os, "WIFEXITED", lambda x: False)
   113 wifexited = getattr(os, "WIFEXITED", lambda x: False)
   114 
   114 
   115 def checkportisavailable(port):
   115 def checkportisavailable(port):
   116     """return true if a port seems free to bind on localhost"""
   116     """return true if a port seems free to bind on localhost"""
   117     try:
   117     families = [getattr(socket, i, None)
   118         s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   118                 for i in ('AF_INET', 'AF_INET6')
   119         s.bind(('localhost', port))
   119                 if getattr(socket, i, None) is not None]
   120         s.close()
   120     for family in families:
   121         return True
   121         try:
   122     except socket.error as exc:
   122             s = socket.socket(family, socket.SOCK_STREAM)
   123         if not exc.errno == errno.EADDRINUSE:
   123             s.bind(('localhost', port))
   124             raise
   124             s.close()
   125         return False
   125             return True
       
   126         except socket.error as exc:
       
   127             if exc.errno not in (errno.EADDRINUSE, errno.EADDRNOTAVAIL):
       
   128                 raise
       
   129     return False
   126 
   130 
   127 closefds = os.name == 'posix'
   131 closefds = os.name == 'posix'
   128 def Popen4(cmd, wd, timeout, env=None):
   132 def Popen4(cmd, wd, timeout, env=None):
   129     processlock.acquire()
   133     processlock.acquire()
   130     p = subprocess.Popen(cmd, shell=True, bufsize=-1, cwd=wd, env=env,
   134     p = subprocess.Popen(cmd, shell=True, bufsize=-1, cwd=wd, env=env,