On Aug 30, 5:58 pm, grocery_stocker <cdal... / gmail.com> wrote:
> On Aug 30, 1:20 pm, "yer... / gmail.com" <yer... / gmail.com> wrote:
>
> > I'm working on an SSL client/server application using persistent TLSv1
> > connections. I'm having some issues with my server and what I think
> > should be a blocking read or select.
>
> I also understood Ruby io.read to be blocking.
>
>
>
> > I'm basically doing this where @io is an OpenSSL::SSL::SSLSocket:
>
> > until @data.length == READ_SIZE do
> >   tmp = @io.read(READ_SIZE - @data.length)
> >   if tmp.nil?
> >     IO.select [@io]
> >   else
> >     @data << tmp
> >   end
> > end
>
> > (I did not initially have the select call, but decided to give that a
> > try.)
>
> > I would expect that the read would block (I have not set O_NONBLOCK on
> > the socket) until there is data to be read. Instead, when there is no
> > data, every read call returns nil. I thought the select would fix
> > that, but it returns immediately and the read call again returns nil.
>
> > Am I misunderstanding how this should work? Would the fact that it's
> > an SSL connection cause the issue?
>
> > I'm using 1.8.4 on Linux.
>
> > Thanks for any insights you can offer.
>
> > Jeremy
>
> Maybe I'm not the best person to be giving advice, but I don't think
> your do/end is a legal Ruby construction.
>
> I was under the impression you would use do/end like the following
>
> sock.each_line do |line|
>   puts line
> end
>
> Notice the nifty | | thingies. This will read each line and then
> return.
>
> Chad


Disregard the post. Your do/end is legal. I think I was thinking of
something else when I made the comment.