Curl 최대 시간 및 연결 시간 초과가 전혀 작동하지 않습니다.

Curl 최대 시간 및 연결 시간 초과가 전혀 작동하지 않습니다.

나는 컬 7.68.0(x86_64-pc-linux-gnu) libcurl/7.68.0을 실행 중이고 다음을 설정하려고 합니다.--최대 시간또는 --연결 시간이 초과되었습니다, 불행히도 이러한 값은 아무런 영향을 미치지 않는 것 같습니다.

개념 증명 1:

time curl -v -k -I --max-time 5 https://myawesomehost/file.test
* Resolving timed out after 5001 milliseconds
* Closing connection 0
curl: (28) Resolving timed out after 5001 milliseconds

real    0m10.031s
user    0m0.011s
sys 0m0.012s

5초 후에 명령이 종료되어야 하지만 10.031초가 걸렸습니다.

PoC 2:

time curl -v -k -I --connect-timeout 3.0 https://myawesomehost/file.test
* Resolving timed out after 3000 milliseconds
* Closing connection 0
curl: (28) Resolving timed out after 3000 milliseconds

real    0m10.068s
user    0m0.005s
sys 0m0.010s

이번에도 10.068초가 걸렸습니다.

사용할 수 있다는 것을 알았습니다정지시키다명령줄 도구인데 컬에 무슨 문제가 있는지 궁금합니다.

답변1

당신을 보지 않고 curl --version, 이 정확한 문제를 바탕으로 어둠 속에서 이것을 시도해 보겠습니다. 귀하의 컬 버전은 c-ares 없이 구축되었습니까? 첫 번째 줄은 curl --version다음을 알려줍니다.

curl 7.71.0-DEV (x86_64-unknown-linux-gnu) libcurl/7.71.0-DEV c-ares/1.10.0

최근에 DNS 시간 초과로 인해 컬이 지정된 시간 초과를 초과하는 동일한 문제가 발생했습니다. 세부 정보를 연 후 DNS 조회 DID 시간 초과가 5초로 표시되지만 완전히 시간 초과되어 닫히기 전에 20초까지 기다립니다. 우리의 루트로 인해 해당 버전에는c-전쟁의 신(비동기 DNS 확인자 라이브러리).

나는 그들의 소스 코드로 그것을 만들었습니다.깃허브이것을 사용하세요지시하다하지만 추가./configure --enable-ares

c-ares/1.10.0여기에서 c-ares로 빌드된 버전 정보를 볼 수 있습니다.

$ /usr/local/bin/curl --version
curl 7.71.0-DEV (x86_64-unknown-linux-gnu) libcurl/7.71.0-DEV c-ares/1.10.0
Release-Date: [unreleased]
Protocols: dict file ftp gopher http imap pop3 rtsp smtp telnet tftp
Features: AsynchDNS IPv6 Largefile UnixSockets

예상대로 작동합니다

$ time /usr/local/bin/curl --max-time 5 google.com -v
* Resolving timed out after 5000 milliseconds
* Closing connection 0
curl: (28) Resolving timed out after 5000 milliseconds

real    0m5.002s
user    0m0.000s
sys     0m0.002s

c-ares 없이 구축

/usr/local/bin/curl --version
curl 7.71.0-DEV (x86_64-unknown-linux-gnu) libcurl/7.71.0-DEV
Release-Date: [unreleased]
Protocols: dict file ftp gopher http imap pop3 rtsp smtp telnet tftp 
Features: AsynchDNS IPv6 Largefile UnixSockets

시간 초과가 작동하지 않습니다.

time /usr/local/bin/curl --max-time 5 google.com -v
* Resolving timed out after 5000 milliseconds
* Closing connection 0
curl: (28) Resolving timed out after 5000 milliseconds

real    0m20.023s
user    0m0.003s
sys     0m0.000s

소스에서 컬을 빌드하는 경우 또는 옵션인 경우에만 이 옵션을 활성화해야 할 수도 있습니다.

편집자: JamesTheAwesomeDude는 이 cURL의 출처를 추적하는 것이 알아낼 가치가 있다는 점을 지적했습니다. 제 경우에는 Amazon Linux 2를 실행하는 새로운 EC2 인스턴스였습니다.

$ cat /etc/*-release | grep PRETTY_NAME
PRETTY_NAME="Amazon Linux 2"

관련 정보