(addrinfo_list, sockopt, timeout)
| 193 | |
| 194 | |
| 195 | def _open_socket(addrinfo_list, sockopt, timeout): |
| 196 | err = None |
| 197 | for addrinfo in addrinfo_list: |
| 198 | family, socktype, proto = addrinfo[:3] |
| 199 | sock = socket.socket(family, socktype, proto) |
| 200 | sock.settimeout(timeout) |
| 201 | for opts in DEFAULT_SOCKET_OPTION: |
| 202 | sock.setsockopt(*opts) |
| 203 | for opts in sockopt: |
| 204 | sock.setsockopt(*opts) |
| 205 | |
| 206 | address = addrinfo[4] |
| 207 | err = None |
| 208 | while not err: |
| 209 | try: |
| 210 | sock.connect(address) |
| 211 | except socket.error as error: |
| 212 | sock.close() |
| 213 | error.remote_ip = str(address[0]) |
| 214 | try: |
| 215 | eConnRefused = ( |
| 216 | errno.ECONNREFUSED, |
| 217 | errno.WSAECONNREFUSED, |
| 218 | errno.ENETUNREACH, |
| 219 | ) |
| 220 | except AttributeError: |
| 221 | eConnRefused = (errno.ECONNREFUSED, errno.ENETUNREACH) |
| 222 | if error.errno not in eConnRefused: |
| 223 | raise error |
| 224 | err = error |
| 225 | continue |
| 226 | else: |
| 227 | break |
| 228 | else: |
| 229 | continue |
| 230 | break |
| 231 | else: |
| 232 | if err: |
| 233 | raise err |
| 234 | |
| 235 | return sock |
| 236 | |
| 237 | |
| 238 | def _wrap_sni_socket(sock: socket.socket, sslopt: dict, hostname, check_hostname): |
no test coverage detected
searching dependent graphs…