Noah wrote:
> Ah, it turns out I was generating that exception, but I couldn't see it
> because it was jumping to an 'ensure' block, and I guess the thread would
> just die.  I moved the s.close into the ensure block and now it's working
> great.

In case you haven't come across it yet:

   Thread.abort_on_exception = true

will abort the whole process, instead of just killing the thread 
quietly. Good for debugging...