【问题标题】:ruby 2.5: set timeout on tcp socket's readruby 2.5:在 tcp 套接字的读取上设置超时
【发布时间】:2020-01-13 16:38:54
【问题描述】:

Ruby 2.5 的 doc 说:
myTCPServer = Socket.tcp(host, port, nil, nil, :connect_timeout=60),
它接受的唯一选项是:connect_timeout

(Ruby 2.0 的 doc 可能存在复制粘贴错误, 声称:timeout 是另一种选择,但没有说明该选项的作用。无论如何,该选项在 Ubuntu 18.04 LTS 上的 2.5.1p57 中不起作用。)

gem tcp_timeout 是创建 TCP 套接字的最佳方法,其连接的会话可以在指定的持续时间内读取超时,例如通过 mySession.gets
connect 没有超时。 写入没有超时。)

还是IO::select

【问题讨论】:

  • “最好的方法”?谁知道。似乎没有内置方式。 tcp_timeout 在后台使用 IO::select,所以这种方法肯定有效。一个简单的基于线程的计时器也可以工作。

标签: ruby sockets timeout ruby-2.5


【解决方案1】:

是的,IO::select,使用 recvfrom 而不是 gets(可能需要等待一段时间才能换行)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 2010-09-18
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 2012-04-08
    相关资源
    最近更新 更多