使用 Timeout::timeout(n) 缩短套接字超时似乎对我不起作用

2023-12-08

我发现我认为应该完美地工作https://stackoverflow.com/questions/517219?tab=oldest#tab-top但是,它对我不起作用。

我在 Windows 上安装了 Ruby 1.9.1,当我尝试示例“is_port_open”测试时,它不起作用。无论我为超时设置什么值,套接字调用仍然需要大约 20 秒才能超时。有什么想法吗?


以下代码似乎适用于 Windows 上的 ruby​​ 1.9.1:

require 'socket'

def is_port_open?(ip, port)
  s = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
  sa = Socket.sockaddr_in(port, ip)

  begin
    s.connect_nonblock(sa)
  rescue Errno::EINPROGRESS
    if IO.select(nil, [s], nil, 1)
      begin
        s.connect_nonblock(sa)
      rescue Errno::EISCONN
        return true
      rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
        return false
      end
    end
  end

  return false
end

我还没有弄清楚为什么原始的 is_port_open?() 代码不能在带有 ruby​​ 1.9.1 的 Windows 上运行(它可以在其他操作系统上运行)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Timeout::timeout(n) 缩短套接字超时似乎对我不起作用 的相关文章

随机推荐

  • 根据邮政编码确定 USPS 邮政区域的公式

    我希望能够更轻松地按 USPS 邮区对数百个信封进行分类 困难在于必须根据原始邮政编码对美国 8 个区域中的每一个区域进行手动排序 91352 http postcalc usps gov ZoneCharts 我有一个包含 ZIP 列的联
  • 对 ? 的行为感到困惑。操作员

    这是我的代码 class Address public bool IsAppartment get set class Employee public string Name get set public Address Address g
  • 关闭选项卡前确认框

    我希望当用户尝试关闭窗口时有一个确认框 window onbeforeunload function evt var message Are you sure you want to leave cause there are some u
  • HTML5 输入模式中的正则表达式无效

    我需要在 HTML 输入中使用这个正则表达式 取自以逗号或逗号和空格分隔的项目列表的正则表达式 s s 所以我将其设置为输入
  • 如何触发 Chrome 扩展按钮的点击?

    我正在建立一个自动化测试套件使用 Selenium Web 驱动程序 在某个时刻 我必须通过以下方式测试页面的工作方式 Chrome 扩展程序打开或关闭 可以将其想象为您想要单击 Adblock 扩展 然后单击对此站点的禁用 然后 再次打开
  • g++ -fdump-class-hierarchy 输出中的第一个 (int (*)(...))0 vtable 条目是什么?

    对于这段代码 class B1 public virtual void f1 class D public B1 public void f1 int main B1 b1 new B1 D d new D return 0 编译后 我得到
  • 使用 CloudWatch Metric Filter 报告内存消耗百分比

    我们广泛使用 AWS Lambda 作为我们基础设施的一部分 为了获得更好的可见性 我希望能够报告一个自定义的 CloudWatch 指标 其值为内存已使用 内存分配 这可以使用 CloudWatch 日志和指标过滤器来实现 考虑以下日志消
  • 当我调用代码格式化程序时,如何避免扩展折叠区域?

    如您所知 Delphi 2010 具有内置代码格式化功能 但是 格式化会展开所有折叠的代码块 有什么想法如何修复它吗 这个 功能 对我来说特别烦人 当我找不到任何关于这个问题的提及时 我真的很惊讶 我尝试过的 寻找替代方案 例如 GExpe
  • 检查所有复选框 Jquery

    我使用此代码来检查树视图中的复选框 HTML div ul li li ul div
  • 如何从Around Advise获取调用者方法信息

    ThisJoinPoint只能获取当前方法信息 反正要获取调用者方法信息 您可以尝试特殊变量thisEnclosingJoinPointStaticPart它保存封闭 JoinPoint 的静态部分 提及here 示例 和here docs
  • 如果更改索引中使用的字段,mongodb 是否会重新索引?

    假设您有一个带有名为 primary key 字段的集合 primary key 1234 name jimmy lastname page 我有一个关于 primary key 的索引 这个集合有数百万行 我想看看更改其中一条记录的pri
  • 如何以编程方式设置文件标签

    当使用 Windows 资源管理器查看文件时 我可以选择设置 标签 类别 或其他属性 对于 JPEG 可以选择一组不同的属性 包括 标签 我希望能够以编程方式设置这些 如何使用 Delphi 以编程方式设置文件标记和其他文件属性 我有 De
  • 如何在 Jupyter 笔记本上从 * .IPYNB 文件执行 * .PY 文件?

    我正在开发一个 Python Notebook 我想要这样大输入代码 输入 打包成 PY 文件并从笔记本中调用该文件 运行 的动作我知道笔记本中的 PY 文件 并且命令在 Linux 或 Windows 之间有所不同 但是 当我执行此操作并
  • 如何移出 IntelliJ IDEA 中自动完成的括号(不使用箭头键)?

    我最近从 Eclipse 切换到 IntelliJ IDEA 并发现自己想知道如何将光标移出一对自动完成的括号 在 Eclipse 中 当我输入完一对括号后 按 Tab 键将使我退出括号 不使用箭头键如何做同样的事情 非常感谢您的帮助 ID
  • 使用 htaccess 创建 SEO 友好的 url

    我正在尝试重写网站的 url 我应该提到的是 index php 现在的工作方式是获取 p 页面 参数并包含适当的文件 所以请求一个页面是这样的 www domain com index php p home www domain com
  • 在 Camera2 API 中切换闪光灯

    我的问题是 当我在不同的 Flash 模式之间切换然后想要捕获图像时 我的 captureBuilder 不会设置所选的 Flash 模式 仅当我关闭并重新打开相机时它才有效 我拿了https github com googlesample
  • 如何安全删除旧的 InnoSetup 安装?

    我使用 InnoSetup 5 5 1 a 来安装 Delphi 6 软件 一位用户刚刚告诉我 如果不手动卸载 旧的卸载条目会堆积在控制面板的删除程序列表中 我正在考虑更改我的安装以自动删除旧条目 但我不想删除有效的旧条目 一些用户喜欢保留
  • 在特定内存地址创建新的 C++ 对象?

    C 是否可以在特定内存位置创建新对象 我有一块共享内存 我想在其中创建一个对象 这可能吗 你要放置new 它基本上使用现有内存块调用构造函数 而不是从堆中分配新内存 Edit 确保您理解有关负责为使用放置创建的对象显式调用析构函数的说明ne
  • 如何使 git log 输出只在一行上显示日期和哈希值?

    我需要以这种格式获取一组 github 的日期和提交结果 Date Commit 19 Mar 2015 b6959eafe0df6031485509c539e22eaf2780919c 1 Apr 2015 9a1f13339cc7d43
  • 使用 Timeout::timeout(n) 缩短套接字超时似乎对我不起作用

    我发现我认为应该完美地工作https stackoverflow com questions 517219 tab oldest tab top但是 它对我不起作用 我在 Windows 上安装了 Ruby 1 9 1 当我尝试示例 is