|
6 | 6 | use Amp\Cancellation;
|
7 | 7 | use Amp\CancelledException;
|
8 | 8 | use Amp\DeferredCancellation;
|
| 9 | +use Amp\Dns\DnsException; |
9 | 10 | use Amp\Dns\DnsRecord;
|
10 | 11 | use Amp\File\File;
|
11 | 12 | use Amp\File\FilesystemException;
|
|
17 | 18 | use Amp\Http\Client\Psr7\PsrHttpClientException;
|
18 | 19 | use Amp\Http\Client\Request as AmpRequest;
|
19 | 20 | use Amp\Http\Client\Response;
|
20 |
| -use Amp\Http\Client\SocketException; |
| 21 | +use Amp\Http\Client\TimeoutException; |
21 | 22 | use Amp\Http\Tunnel\Http1TunnelConnector;
|
22 | 23 | use Amp\Http\Tunnel\Https1TunnelConnector;
|
23 | 24 | use Amp\Socket\Certificate;
|
|
27 | 28 | use Amp\Socket\Socks5SocketConnector;
|
28 | 29 | use AssertionError;
|
29 | 30 | use GuzzleHttp\Exception\ConnectException;
|
| 31 | +use GuzzleHttp\Exception\RequestException; |
30 | 32 | use GuzzleHttp\Promise\Promise;
|
31 | 33 | use GuzzleHttp\Promise\PromiseInterface;
|
32 | 34 | use GuzzleHttp\Psr7\Request as GuzzleRequest;
|
@@ -140,9 +142,16 @@ function () use (&$promise, $future, $cancellation, $deferredCancellation, $requ
|
140 | 142 | if (!$cancellation->isRequested()) {
|
141 | 143 | $promise->reject($e);
|
142 | 144 | }
|
143 |
| - } catch (SocketException $e) { |
144 |
| - $promise->reject(new ConnectException($e->getMessage(), $request, $e)); |
145 | 145 | } catch (\Throwable $e) {
|
| 146 | + if ($e instanceof TimeoutException) { |
| 147 | + $e = new ConnectException($e->getMessage(), $request, $e); |
| 148 | + } elseif ($e->getPrevious()?->getPrevious() instanceof DnsException) { |
| 149 | + // Wrap DNS resolution exception to ConnectException |
| 150 | + $e = new ConnectException($e->getPrevious()->getMessage(), $request, $e); |
| 151 | + } else { |
| 152 | + $e = RequestException::wrapException($request, $e); |
| 153 | + } |
| 154 | + |
146 | 155 | $promise->reject($e);
|
147 | 156 | }
|
148 | 157 | },
|
|
0 commit comments