TCPSocket select method

Hmm. If you create a method thus:
class TCPSocket
def readableNow?
r,w,e = select([self],nil,nil,0)
return r != nil
end
end

It turns out to use a select OTHER than IO.select. Anyone know, by
chance what the ‘internal’ select method does?
Thanks.
-Roger

Roger P. wrote:

Hmm. If you create a method thus:
class TCPSocket
def readableNow?
r,w,e = select([self],nil,nil,0)
return r != nil
end
end

It turns out to use a select OTHER than IO.select. Anyone know, by
chance what the ‘internal’ select method does?
Thanks.
-Roger

The kernel select method -

Performs a low level select call, which waits for data to become
available from input/output devices. The first three parameters are
arrays of IO objects or nil. The last is a timeout in seconds, which
should be an Integer or a Float. The call waits for data to become
available for any of the IO objects in read_array, for buffers to have
cleared sufficiently to enable writing to any of the devices in
write_array, or for an error to occur on the devices in error_array. If
one or more of these conditions are met, the call returns a
three-element array containing arrays of the IO objects that were ready.
Otherwise, if there is no change in status for timeout seconds, the call
returns nil. If all parameters are nil, the current thread sleeps
forever.

Dunno if thats what u were lookin for

On Monday 13 August 2007, Roger P. wrote:

Hmm. If you create a method thus:
class TCPSocket
def readableNow?
r,w,e = select([self],nil,nil,0)
return r != nil
end
end

It turns out to use a select OTHER than IO.select. Anyone know, by
chance what the ‘internal’ select method does?
It cannot use IO.select since IO.select is a singleton method of IO and
a
TCPSocket object is an instance of IO. The only way to explicitely get
IO.select is to call
r,w,e = IO.select(…)

It calls Kernel#select. And I wouldn’t be surprised if Kernel#select and
IO.select were actually the same method …

Sylvain

Eric H. wrote:

On Aug 13, 2007, at 23:54, Sylvain J. wrote:

chance what the ‘internal’ select method does?
It cannot use IO.select since IO.select is a singleton method of IO
and a
TCPSocket object is an instance of IO. The only way to explicitely get
IO.select is to call
r,w,e = IO.select(…)

It calls Kernel#select. And I wouldn’t be surprised if
Kernel#select and
IO.select were actually the same method …

They are.

class TCPSocket
def readableNow?
r,w,e = select([self],nil,nil,0)
return r != nil
end
end

So…follow up question:
with the above code, if you try to run it, it says that “select takes 0
arguments, 4 given” (whereas ‘normally’ select takes four). If I
replace the call to select (above), with IO.select, then it works with 4
parameters. So I am thinking it is a different ‘internal’ select
function of some type. So…my guess is it is not a call to IO.select
or Kernel.select…hmm…

On Aug 13, 2007, at 23:54, Sylvain J. wrote:

chance what the ‘internal’ select method does?
It cannot use IO.select since IO.select is a singleton method of IO
and a
TCPSocket object is an instance of IO. The only way to explicitely get
IO.select is to call
r,w,e = IO.select(…)

It calls Kernel#select. And I wouldn’t be surprised if
Kernel#select and
IO.select were actually the same method …

They are.

On Aug 14, 3:23 pm, Roger P. [email protected] wrote:

It calls Kernel#select. And I wouldn’t be surprised if
end

So…follow up question:
with the above code, if you try to run it, it says that “select takes 0
arguments, 4 given” (whereas ‘normally’ select takes four). If I
replace the call to select (above), with IO.select, then it works with 4
parameters. So I am thinking it is a different ‘internal’ select
function of some type. So…my guess is it is not a call to IO.select
or Kernel.select…hmm…

Posted viahttp://www.ruby-forum.com/.

Enumerable#select takes no args… perhaps you have an array of IOs
you’re calling select on?