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.

[code]
  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(!@socketHash.has_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
[/code]

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

···

--
Posted via http://www.ruby-forum.com/.

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?

···

--
Paul Lutus
http://www.arachnoid.com

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

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

···

On 10/3/06, Paul Lutus <nospam@nosite.zzz> 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?

--
There was only one Road; that it was like a great river: its springs
were at every doorstep, and every path was its tributary.