使用Ruby的“准备好了吗?”带get,puts等的IO方法

时间:2009-11-22 17:29:05

标签: ruby sockets nonblocking io

标准Ruby库“io / wait”在IO对象ready?上提供了一种方法,如果有可用输入则返回非nil,否则返回nil或false。我知道某些方法(例如sysreadsyswrite)不能安全地用于getsread等更高级别的方法,并且想知道ready?是否是IO.select安全地与更高级别的方法混合。 ready方法似乎相当有用,也许比依赖read更优雅,但令人惊讶的是,我还没有看到它用得太多。 documentation中没有任何内容表明与gets或{{1}}一起使用会不安全,我只是想确定我没有混合不兼容的方法,最终可能导致意外读/写套接字时的行为。

编辑:我想我应该提到我使用的是Ruby 1.8.7。

1 个答案:

答案 0 :(得分:3)

我对Ruby没有很多经验,但我对libc有很多经验,我的意见是肯定的,这是安全的。根据select()或poll()......

实现“就绪”的可能性非常大

如果“ready”的行为类似于一个select(),它已经传递了一个带有零的tv_sec和tv_usec的时间值,那么“准备好”的缺点是你将要旋转...你能否超时准备就绪?