| 1069 | time.sleep(0.01) |
| 1070 | |
| 1071 | def create_connection(*args, **kwargs): |
| 1072 | retVal = None |
| 1073 | |
| 1074 | key = (tuple(args), frozenset(kwargs.items())) |
| 1075 | with kb.locks.socket: |
| 1076 | if key not in socket._ready: |
| 1077 | socket._ready[key] = [] |
| 1078 | |
| 1079 | while len(socket._ready[key]) > 0: |
| 1080 | candidate, created = socket._ready[key].pop(0) |
| 1081 | if (time.time() - created) < PRECONNECT_CANDIDATE_TIMEOUT: |
| 1082 | retVal = candidate |
| 1083 | break |
| 1084 | else: |
| 1085 | try: |
| 1086 | candidate.shutdown(socket.SHUT_RDWR) |
| 1087 | candidate.close() |
| 1088 | except socket.error: |
| 1089 | pass |
| 1090 | |
| 1091 | if not retVal: |
| 1092 | retVal = socket._create_connection(*args, **kwargs) |
| 1093 | |
| 1094 | return retVal |
| 1095 | |
| 1096 | if not hasattr(socket, "_create_connection"): |
| 1097 | socket._ready = {} |