From: Joseph McDonald Date: 2002-06-30T08:04:38+09:00 Subject: select loop question Hi, I've got a question on using a select loop. Here is the basic way I am using select: if (answer = select(readfds, writefds, nil, 10)) answer[0].each do |r| # handle reads end answer[1].each do |w| # handle writes end else # timeout end The question is: How do I know which file descriptors were returned in the answer arrays? That is: after I get an answer and I finish reading from the socket, I want to remove that socket from the readsfs array, but I'm not sure how to do that. Do I need to do something like: answer[0].each do |r| readfds.each_with_index do |orig,i| if r == orig # nuke this one readfds.slice!(i) end end end That seems like an awful lot of overhead (cartesian product?) which I why I think I'm doing it wrong... Does anyone have some example code using a select loop? I would like to use it to multiplex connections to web servers. That is, I have 10000 url's that I would like to retrieve the contents from, and would like to do it using 50 parallel connections using select loop. I know you can use threads for such an operation, but I would prefer to use the select loop method. thanks, -joe