Block reading from socket and STDIN

Discussion in 'Ruby' started by Giuseppe Parlavecchio, Feb 26, 2009.

  1. Hi I am pretty new in ruby, may be this topic has already been discussed
    here. But I start running out of resources.
    I am on a Windows XP PC and I am using ruby186-26.

    I am writing a client/Multiplexing Server socket application,
    (I took most of the code from the manual).

    The server application, beside to listening on the socket via the
    select(...), must listening at the standard input. This is because a
    user has to give input to the server while he is handling the socket
    connection to clients.

    The problem I found is that the select(...) and the STDIN.gets methos
    are both blocking also if I run it on two different threads.

    Many thanks
     
    Giuseppe Parlavecchio, Feb 26, 2009
    #1
    1. Advertisements


  2. This is off the top of my head, so apologies if it's wrong, but as
    STDIN is a regular IO object you _should_ be able to handle its input
    from the same select(...) call as the server socket.

    Ellie

    Eleanor McHugh
    Games With Brains
    http://slides.games-with-brains.net
     
    Eleanor McHugh, Feb 26, 2009
    #2
    1. Advertisements

  3. Giuseppe Parlavecchio

    Dylan Evans Guest

    [Note: parts of this message were removed to make it a legal post.]

    Pretty sure gets doesn't actually block. I believe it is implemented with a
    select internally.

    Try this as a test
    Thread.new {
    loop {
    puts "loop "
    }
    }
    STDIN.gets

    If it stops then gets is blocking



    On Thu, Feb 26, 2009 at 8:01 PM, Eleanor McHugh <
     
    Dylan Evans, Feb 26, 2009
    #3
  4. Windows + STDIN.gets == ruby blocks other threads, sorry to say.

    At least, that's my experience in ruby186. Maybe this has changed more
    recently?
     
    Joel VanderWerf, Feb 28, 2009
    #4
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.