The timeout option for http::geturl is
implemented by a timer event that calls
http::reset $token timeout
If there's an error returned by the command
specified by the -command option, then
http::reset will unset the state array and
raise an error that will be processed as
a background error.
All this processing takes place in an event
loop, probably within [http::wait $token].
Given the above, it appears that callers
of [http::wait $token] need to be able to
handle the non-existence of $token upon
its return. Also, [http::wait] itself needs to
be written to deal with the non-existence
of $token when its call to [vwait] returns.
Something needs fixing around lines 358 and 840
of the current http.tcl.