From 429d66c9b18c2c83d1a6ff8fb4364a4e7f03899e Mon Sep 17 00:00:00 2001 From: Ward Wouts Date: Tue, 1 Mar 2005 19:55:32 +0000 Subject: [PATCH] nicer thread startup --- trunk/ripnews/news/article.rb | 70 +++++++++++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 4 deletions(-) diff --git a/trunk/ripnews/news/article.rb b/trunk/ripnews/news/article.rb index e1aaab2..248c590 100644 --- a/trunk/ripnews/news/article.rb +++ b/trunk/ripnews/news/article.rb @@ -1,4 +1,4 @@ -# $Dwarf: article.rb,v 1.108 2005/02/06 13:42:03 ward Exp $ +# $Dwarf: article.rb,v 1.109 2005/02/07 08:53:43 ward Exp $ # $Source$ # @@ -28,6 +28,68 @@ class ArticleError < RuntimeError; end class TempError < ArticleError; end class PermError < ArticleError; end +module Net +class KANNTP < Net::NNTP + +def initialize(host, port=nil, user=nil, password=nil, readermode=nil) + @host = host + @semaphore = Mutex.new + @resettime = 60 + @timecounter = @resettime + @thr = Thread.new{ + Thread.pass + while true +# puts "timecounter #{@timecounter} #{@host}" + if @timecounter > 0 + @timecounter -= 5 + sleep 5 + else + sendka + sleep 5 + end + end + } + super +end + +def putline(line) +# puts "timerreset #{@host}" + @timecounter = @resettime + super +end + +def longcmd(line) + @semaphore.synchronize{ + return super + } +end + +def shortcmd(line) + @semaphore.synchronize{ + return super + } +end + +def setresettime(time) + @resettime = time +end + +def sendka +# puts "SENDING KEEP ALIVE TO #{@host}" + res = shortcmd("DATE") +# puts res +end + +def quit + @thr.exit + super +end + +private :sendka + +end # class KANNTP +end # module Net + class Article Debuglevel = 1 @@ -54,10 +116,10 @@ def initialize(nntpservers, groupname, newsrc="~/.newsrc") p Time.now begin timeout(60) do - @connections[server]["nntp"] = Net::NNTP.new(server) + @connections[server]["nntp"] = Net::KANNTP.new(server) end resp = @connections[server]["nntp"].mode_reader - rescue TimeoutError + rescue TimeoutError, Errno::ECONNRESET sleep 3 retry end @@ -85,7 +147,7 @@ def reconnect(server) sleep 3 #timeout(180) do timeout(60) do - @connections[server]["nntp"] = Net::NNTP.new(server) + @connections[server]["nntp"] = Net::KANNTP.new(server) end resp = @connections[server]["nntp"].mode_reader rescue SocketError, Errno::EINVAL, EOFError, Errno::ETIMEDOUT, TimeoutError