Was writting a script to poll an audiotron (www.audiotron.net) and 
record a list of the music that has been played.

The audiotron has an internal webserver so I used the net/http package.
The script runs fine for a while, but after about the 11th pass it falls 
over with the following error:

I:/development/ruby/lib/ruby/1.7/net/protocol.rb:501:in `sysread': Bad 
file descriptor (Errno::EBADF)
from I:/development/ruby/lib/ruby/1.7/net/protocol.rb:501:in `rbuf_fill'
from I:/development/ruby/lib/ruby/1.7/net/protocol.rb:443:in `read'
from I:/development/ruby/lib/ruby/1.7/net/http.rb:1520:in `read_chunked'
from I:/development/ruby/lib/ruby/1.7/net/http.rb:1494:in `read_body_0'
from I:/development/ruby/lib/ruby/1.7/net/http.rb:1477:in `read_body'
from I:/development/ruby/lib/ruby/1.7/net/http.rb:1463:in `reading_body'
from I:/development/ruby/lib/ruby/1.7/net/http.rb:780:in `request'
from I:\ruby stuff\audiotron-play-watcher.rb:37
from I:\ruby stuff\audiotron-play-watcher.rb:36:in `start'
from I:\ruby stuff\audiotron-play-watcher.rb:36

I'm puzzeled as to what the problem is. The page is always there, if 
will update if continually refreshed in a browser without a problem.

What file descriptor is being referred to here?

Anyone have any thoughts or comments?

TIA

Rob

<<<<<<<<<<<<<<<Attached below is the code>>>>>>>>>>>>>>>>>>>

require 'english'
require 'net/http'
require 'log4r'
include Log4r

# set up logger
atlog = Logger.new 'atlog'
outputter = FileOutputter.new( atlog, { 'filename', './at.log', 'trunc', 
false } )
outputter.formatter = PatternFormatter.new :pattern => "[%l] %d :: %m"
atlog.outputters = outputter

# set up connection details for audiotron
req = Net::HTTP::Get.new('apigetstatus.asp')
address = Net::HTTP.new('atron00427c', 80)
req.basic_auth 'admin','admin'

response = nil

previousFile = nil
currentFile = nil
currentArtist = nil
currentAlbum = nil
currentTrack = nil
currentGenre = nil
currentPlayStyle = nil
currentTrackLength = 0

queueLength = 0
currentIndex = 0

passes = 0

while true
	atlog.debug("Pass #{passes}")
	passes += 1
	address.start { |http|
		response = http.request(req) # <<<---- problem line
	}
	
	response.body.each { | line |
		if line =~ /TotalTime=/
			currentTrackLength = $POSTMATCH
		elsif line =~ /RANDOM_LED=/
			if $POSTMATCH
				currentPlayStyle = "random"
			else
				currentPlayStyle = "ordered"
			end
		elsif line =~ /^Title=/
			currentTrack = $POSTMATCH.chomp
		elsif line =~ /^Artist=/
			currentArtist = $POSTMATCH.chomp
		elsif line =~ /^Album=/
			currentAlbum = $POSTMATCH.chomp
		elsif line =~ /^Genre=/
			currentGenre = $POSTMATCH.chomp
		elsif line =~ /^SourceID=/
			currentFile = $POSTMATCH.chomp
		elsif line =~ /^QueueLen=/
			queueLength = $POSTMATCH.chomp
		elsif line =~ /^CurrIndex=/
			currentIndex = $POSTMATCH.chomp
		end
	}
	
	if currentFile != previousFile
		atlog.info("Playing track #{currentIndex} of #{queueLength} in a 
#{currentPlayStyle} way\n" +
			"#{currentTrack} by #{currentArtist} on #{currentAlbum} is 
#{currentTrackLength} seconds long\n" +
			"File is :- #{currentFile}\n")
			
		previousFile = currentFile
	end
	
	currentFile = nil
	currentTrack = nil
	currentArtist = nil
	currentAlbum = nil
	currentGenre = nil
	currentPlayStyle = nil
	currentTrackLength = nil
	queueLength = 0
	currentIndex = 0
	
	response = nil
	
	sleep 5
end