I am using the following command in a script (shown here running under strace),

tmp$ strace -s999 -f -e trace=network wget -S -v --no-check-certificate 
--waitretry=1 --tries=1 --timeout=1 --read-timeout=1 --wait=1 -O 
/tmp/280200433.tmp https://www.tesco.com/groceries/en-GB/products/280200433
--2020-12-06 17:52:25--  
https://www.tesco.com/groceries/en-GB/products/280200433
Resolving www.tesco.com (www.tesco.com)... socket(AF_UNIX, 
SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 4
connect(4, {sa_family=AF_UNIX, sun_path="/var/run/nscd/socket"}, 110) = -1 
ENOENT (No such file or directory)
socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 4
connect(4, {sa_family=AF_UNIX, sun_path="/var/run/nscd/socket"}, 110) = -1 
ENOENT (No such file or directory)
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 4
setsockopt(4, SOL_IP, IP_RECVERR, [1], 4) = 0
connect(4, {sa_family=AF_INET, sin_port=htons(53), 
sin_addr=inet_addr("192.168.1.254")}, 16) = 0
sendmmsg(4, [{msg_hdr={msg_name=NULL, msg_namelen=0, 
msg_iov=[{iov_base="\357\317\1\0\0\1\0\0\0\0\0\0\3www\5tesco\3com\0\0\1\0\1", 
iov_len=31}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, msg_len=31}, {msg_hdr={msg_name=NULL, 
msg_namelen=0, 
msg_iov=[{iov_base="\376\303\1\0\0\1\0\0\0\0\0\0\3www\5tesco\3com\0\0\34\0\1", 
iov_len=31}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, msg_len=31}], 2, MSG_NOSIGNAL) = 2
recvfrom(4, 
"\357\317\201\0\0\1\0\1\0\0\0\0\3www\5tesco\3com\0\0\1\0\1\300\f\0\1\0\1\0\0\1,\0\4hR\301\371",
 2048, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.1.254")}, 
[28->16]) = 47
recvfrom(4, "\376\303\201\2\0\1\0\0\0\0\0\0\3www\5tesco\3com\0\0\34\0\1", 65536, 0, 
{sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.1.254")}, [28->16]) = 
31104.82.193.249
Connecting to www.tesco.com (www.tesco.com)|104.82.193.249|:443... socket(AF_INET, SOCK_STREAM, IPPROTO_IP) = 4 connect(4, {sa_family=AF_INET, sin_port=htons(443), sin_addr=inet_addr("104.82.193.249")}, 16) = 0
connected.
HTTP request sent, awaiting response...

but the timeout never happens, it just hangs indefinitely with the TCP
connection remaining in the ESTABLISHED state according to netstat.

I am wondering if the problem is something to do with the initial part of the SSL negotiation since it happens very early on after the connection is established, and checking old messages in this list, there were bug reports about this a few years back.

Accessing the same URL from a web browser works fine, rendering the content OK. This may of course involve client-side scripting but that is another matter. I am assuming wget should be able to read and store whatever HTML is produced and not just hang.

I know I could run wget under the Gnutils timeout command as a workaround but I would prefer to get wget's timeout to work.

Any thoughts?

Thanks
Tom Crane

System/wget details:
        OS:     Slackware64-current
        Kernel: 5.4.6

$ wget --version
GNU Wget 1.20.3 built on linux-gnu.

-cares +digest -gpgme +https +ipv6 +iri +large-file -metalink +nls
+ntlm +opie +psl +ssl/openssl

Wgetrc:
    /home/tom/.wgetrc (user)
    /etc/wgetrc (system)
Locale:
    /usr/share/locale
Compile:
    gcc -DHAVE_CONFIG_H -DSYSTEM_WGETRC="/etc/wgetrc"
    -DLOCALEDIR="/usr/share/locale" -I. -I../lib -I../lib -DHAVE_LIBSSL
    -DNDEBUG -O2 -fPIC
Link:
    gcc -DHAVE_LIBSSL -DNDEBUG -O2 -fPIC -lpcre2-8 -luuid -lidn2 -lssl
    -lcrypto -lz -lpsl ftp-opie.o openssl.o http-ntlm.o ../lib/libgnu.a
    -lunistring

$ cat ~/.wgetrc
robots = off
user-agent = Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 
Firefox/60.0

Reply via email to