(
params,
retry,
addr,
loop,
config,
connection_class,
record_class,
params_input,
)
| 1064 | |
| 1065 | |
| 1066 | async def __connect_addr( |
| 1067 | params, |
| 1068 | retry, |
| 1069 | addr, |
| 1070 | loop, |
| 1071 | config, |
| 1072 | connection_class, |
| 1073 | record_class, |
| 1074 | params_input, |
| 1075 | ): |
| 1076 | connected = _create_future(loop) |
| 1077 | |
| 1078 | proto_factory = lambda: protocol.Protocol( |
| 1079 | addr, connected, params, record_class, loop) |
| 1080 | |
| 1081 | if isinstance(addr, str): |
| 1082 | # UNIX socket |
| 1083 | connector = loop.create_unix_connection(proto_factory, addr) |
| 1084 | |
| 1085 | elif params.ssl and params.ssl_negotiation is SSLNegotiation.direct: |
| 1086 | # if ssl and ssl_negotiation is `direct`, skip STARTTLS and perform |
| 1087 | # direct SSL connection |
| 1088 | connector = loop.create_connection( |
| 1089 | proto_factory, *addr, ssl=params.ssl |
| 1090 | ) |
| 1091 | |
| 1092 | elif params.ssl: |
| 1093 | connector = _create_ssl_connection( |
| 1094 | proto_factory, *addr, loop=loop, ssl_context=params.ssl, |
| 1095 | ssl_is_advisory=params.sslmode == SSLMode.prefer) |
| 1096 | else: |
| 1097 | connector = loop.create_connection(proto_factory, *addr) |
| 1098 | |
| 1099 | tr, pr = await connector |
| 1100 | |
| 1101 | try: |
| 1102 | await connected |
| 1103 | except ( |
| 1104 | exceptions.InvalidAuthorizationSpecificationError, |
| 1105 | exceptions.ConnectionDoesNotExistError, # seen on Windows |
| 1106 | ): |
| 1107 | tr.close() |
| 1108 | |
| 1109 | # retry=True here is a redundant check because we don't want to |
| 1110 | # accidentally raise the internal _RetryConnectSignal to the user |
| 1111 | if retry and ( |
| 1112 | params.sslmode == SSLMode.allow and not pr.is_ssl or |
| 1113 | params.sslmode == SSLMode.prefer and pr.is_ssl |
| 1114 | ): |
| 1115 | # Trigger retry when: |
| 1116 | # 1. First attempt with sslmode=allow, ssl=None failed |
| 1117 | # 2. First attempt with sslmode=prefer, ssl=ctx failed while the |
| 1118 | # server claimed to support SSL (returning "S" for SSLRequest) |
| 1119 | # (likely because pg_hba.conf rejected the connection) |
| 1120 | raise _RetryConnectSignal() |
| 1121 | |
| 1122 | else: |
| 1123 | # but will NOT retry if: |
no test coverage detected
searching dependent graphs…