2
如果服務器進入無限循環,在某段時間之後如何關閉服務器連接?一段時間後套接字超時
這裏是我正努力代碼:
set s [socket $host $port]
fconfigure $s -blocking 1 -buffering line
after 2000 set end 1
vwait end
if { $s != "" } {
puts -nonewline $s "$msg\n.\n"
flush $s
fileevent $s readable [set answer [read $s]]
puts "$answer"
if {[catch {close $s}]} {
puts "Server hanged"
}
這上面的代碼工作,如果答案是由服務器沒有任何問題給出。如果服務器進入無限循環,它將繼續掛在read $s
。請幫助您如何處理read socket
這種非阻塞模式,就像fconfigure
一樣。
我現在還沒有答案,但請注意,您調用'fileevent'的方式不會_安裝'[set answer [read $ s]]'作爲回調腳本。相反,它在該調用期間執行該操作(嘗試從套接字中讀取並將結果分配給「answer」),並將從套接字讀取的任何內容設置爲回調腳本,這很可能不是您想要的。 –
Incerease超時期 – xrcwrn