使用 Timeout::timeout(n) 缩短套接字超时似乎对我不起作用
我发现我认为应该完美地工作 https://stackoverflow.com/questions/517219?tab=oldest #tab-top 但是,它对我不起作用。
我在 Windows 上安装了 Ruby 1.9.1,当我尝试示例“is_port_open”测试时,它不起作用。无论我为超时设置什么值,套接字调用仍然需要大约 20 秒才能超时。有什么想法吗?
I found what I thought should work perfectly at https://stackoverflow.com/questions/517219?tab=oldest#tab-top but, it did not work for me.
I have Ruby 1.9.1 installed on Windows and, when I try the example "is_port_open" test, it does not work. The socket call still takes around 20 seconds to timeout no matter what value I set for the timeout. Any ideas why?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这可能是由于 Rubys Timeout 库的一些固有问题造成的。您可以通过直接访问底层套接字库并在套接字上设置超时来实现此目的。这篇文章在一定程度上涵盖了这一点,尽管它假设 *nix,所以你可能会遇到一些 Windows 问题,我不确定套接字实现有多相似。
This may be due to some inherent problems with Rubys Timeout library. You can achieve this by directly accessing the underlying socket library and setting timeouts on the Socket. This article covers this in some depth, although it assumes *nix so you may have some issues with Windows, I'm not sure how similar the socket implementations are.
以下代码似乎适用于 Windows 上的 ruby 1.9.1:
我还没有弄清楚为什么原始 is_port_open?() 代码不能在装有 ruby 1.9.1 的 Windows 上工作(它适用于其他操作系统)。
The following code seems to work with ruby 1.9.1 on Windows:
I haven't figured out yet why the original is_port_open?() code doesn't work on Windows with ruby 1.9.1 (it works on other OSes).