[#408634] How do I make lots of classes aware of each other? — "Andrew S." <lists@...>

I'm apparently missing something fundamental in my knowledge of classes

10 messages 2013/07/02

[#408712] Ruby web service with REST support — "Shubhada S." <lists@...>

Hi All,

17 messages 2013/07/05

[#408812] create variables depending on counter — stefan heinrich <lists@...>

Hi community,

21 messages 2013/07/09

[#408854] execute commands within SMTP email code: send content in variables and not actual variables — dJD col <lists@...>

I am trying to send an email using the code below. I am able to send the

9 messages 2013/07/10

[#409031] tap { break } idiom deserves its own Kernel method? — Andy Lowry <lists@...>

I use this idiom from time to time:

13 messages 2013/07/22

[#409072] Link To Masses Of External Data In Openoffice? — "Austin J." <lists@...>

This is what I want to do.

19 messages 2013/07/23
[#409102] Re: Link To Masses Of External Data In Openoffice? — Tamara Temple <tamouse.lists@...> 2013/07/24

[#409103] Re: Link To Masses Of External Data In Openoffice? — "Austin J." <lists@...> 2013/07/25

tamouse m. wrote in post #1116598:

[#409122] Re: Link To Masses Of External Data In Openoffice? — Tamara Temple <tamouse.lists@...> 2013/07/26

[#409142] Re: Link To Masses Of External Data In Openoffice? — "Austin J." <lists@...> 2013/07/26

tamouse m. wrote in post #1116750:

[#409073] class <=> module — Bráulio Bhavamitra <lists@...>

Hello all,

17 messages 2013/07/23

[#409104] Ruby newbie question on Methods (NoMethoderror) — "Crispian A." <lists@...>

I have recently started learning ruby and so I am writing a small little

10 messages 2013/07/25

[#409170] Working through Ch.10 for learning to program 2.0 (Chris Pine) — JD JD <lists@...>

So, I have been working through this book, and have been doing ok up

33 messages 2013/07/28
[#409195] Re: Working through Ch.10 for learning to program 2.0 (Chris Pine) — Harry Kakueki <list.push@...> 2013/07/29

I tried this and came up with a one-liner that seems to do it. It sorts the

[#409258] WATIR - ScriptError popup on IE - Unable to get rid of! — Graeme Halls <lists@...>

I am new to Ruby & Watir, and I am having a nightmare with IE and Script

11 messages 2013/07/31

Re: closing a socket while another thread is in an IO.select() call on it

From: Graham Menhennitt <graham@...>
Date: 2013-07-21 09:23:14 UTC
List: ruby-talk #409005
On 15/07/2013 18:32, Robert Klemme wrote:
>
>
>
> On Mon, Jul 15, 2013 at 9:53 AM, Graham Menhennitt
> <graham@menhennitt.com.au <mailto:graham@menhennitt.com.au>> wrote:
>
>     Hello Rubyists,
>
>     I have a program that opens a TCPSocket, connects it to a server, and
>     then creates a thread which loops until the socket closes, reading
>     from
>     the socket and processing the data read. It calls IO.select() to wait
>     until there is data available to read.
>
>
> Why don't you just use a blocking read if you have a separate thread
> per socket anyway?  Select is only useful if you want to have a single
> thread process several file descriptors.
>  
>
>     Meanwhile, another thread can
>     close the socket in certain circumstances. If the first thread is in
>     IO.select() when the socket is closed, the result is unpredictable -
>     sometimes the select() returns and sometimes it blocks. I'm not
>     sure of
>     the circumstances that cause it to block or not - it seems random.
>
>
> Hmmm.  That sounds a bit odd.  I would have expected select to return.
>  Maybe there's a race condition in the std lib.
>  
>
>     So, is there some way to make it reliably unblock? Or is there
>     something
>     that the second thread can do to cause the select() to return (set a
>     flag on the socket before closing it, or something)?
>
>
> You could work with a timeout but that seems a bit like a workaround.
>  
>
>     This is with Ruby 2.0.0 p247 on Centos 5 Linux if that's significant.
>
>  
> Kind regards
>
> robert
>
> -- 
> remember.guy do |as, often| as.you_can - without end
> http://blog.rubybestpractices.com/
Thanks for replying, Robert.

I had actually simplified a bit what I told you about my use case -
there was a reason for using select(). But you're right - I changed the
program to use a blocking read instead, and it now works. I suspect
there's some bug in select(), but I'm not sure how to reproduce it. Yes,
a timeout would probably work, but not very elegant.

Thank for your help,
    Graham

In This Thread

Prev Next