Monitoring Socket Disconnect during gets or readline

Hello… I am writing a simple chat program, but i have encountered a
problem. I ask for a client to provide a handle, but it he disconnects
during a gets call, it does weird things.

  def get_handle(session)
    for attempt in (0..2)
      session.print "Please Login\n"

      response=session.gets.strip  # The problem

      re=/(Login)\s(.+)/
      md=re.match(response)
      response=md[2]
      if([email protected]_value?(response))  # This just checks to make 
sure the handle isn't in use.
        return response
      else
        session.print "Handle alerady in use... "
      end
    end
  end

If the client disconnects at this point, ruby seems to be still waiting
for a response. Also, sometimes it sends ruby’s processor usage to 100%.

Is there a better way to do this? Or is there a way to give gets a
timeout? Thanks!
-Jon

Jon Fi wrote:

Hello… I am writing a simple chat program, but i have encountered a
problem. I ask for a client to provide a handle, but it he disconnects
during a gets call, it does weird things.

/…

If the client disconnects at this point, ruby seems to be still waiting
for a response. Also, sometimes it sends ruby’s processor usage to 100%.

Is there a better way to do this? Or is there a way to give gets a
timeout? Thanks!

IO#gets blocks forever if the input goes away, while IO#readline throws
an
exception on EOF. I think your situation qualifies as an EOF. Why not
try
it?

On 10/3/06, Paul L. [email protected] wrote:

IO#gets blocks forever if the input goes away, while IO#readline throws an
exception on EOF. I think your situation qualifies as an EOF. Why not try
it?

Use Eventmachine (http://rubyforge.org/projects/eventmachine).

The thing…you need for painless network programming in ruby.