Hi,
I tried to isolate the issue that a ::http::geturl call hangs in rivet
but works in tclsh.
Could you please verify the following scripts to check if this is the
same for you ?
--Issue--
I tried to isolate the issue, that the following file works well when
executed in a tcl8.6 shell and lets an apache thread hang:
--test_linkcheck.tcl---
puts [package require http]<br/>
if { [catch {
set h [::http::geturl "http://www.elmicron.de/test.txt"]
} err] } {
puts " unknown url<br/>"
} else {
puts [::http::status $h]<br/>
::http::cleanup $h
}
--EOF--
% tclsh8.6 test_linkcheck.tcl
2.8.7<br/>
ok<br/>
%
The file is saved in "/var/www/http" of my test server, and a request of
the address: "//centostest/test_linkcheck.tcl" lets the client wait
until I restart the apache server.
An additional option "-timeout 1000" to geturl would let stop geturl in
a timeout.
The file "http://www.elmicron.de/test.txt" is a 12 byte test file.
----
Tests I have done:
--T1: Try synchronous socket--
The following script tries to get the data by a synchronous socket:
--test_socket.tcl--
set h [socket www.elmicron.de 80]
fconfigure $h -translation crlf -buffering line -blocking 1
puts $h "GET /test.txt HTTP/1.0\nHost: www.elmicron.de\n"
while { ! [eof $h] } {
set data [gets $h]
if {$data ne ""} {
puts $data
}
}
close $h
--eof--
This works well in rivet and in tclsh
--T2: Try asynchronous socket--
The following script loads the data by an asynchoneous method:
--test_socket_async.tcl--
proc sockin {} {
global h
puts [gets $h]
if {[eof $h]} {
close $h
set h ""
}
}
set h [socket -async www.elmicron.de 80]
fconfigure $h -translation crlf -buffering line -blocking 0
puts $h "GET /test.txt HTTP/1.0\nHost: www.elmicron.de\n"
fileevent $h readable sockin
vwait h
--eof--
This works well in tcl86 and hangs the browser when executed with rivet.
--T3: Event loop--
So I thought the issue is the event loop.
So I tried a simple event loop example which stays for 1 second in the
event loop:
--test_vwait.tcl--
puts "wait 1 sec"
set h 0
after 1000 "set h 1"
vwait h
puts end
--eof--
This works well in tclsh and rivet.
------
Is this a bug or a feature ?
Do you also see what I see ?
Are my tests just stupid ?
Thank you for any ideas,
Harald
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]