相关疑难解决方法(0)

Ruby - 查看端口是否打开

我需要一个快速的方法来确定一个给定的端口是否用Ruby打开.我目前正在摆弄这个:

require 'socket'

def is_port_open?(ip, port)
  begin
    TCPSocket.new(ip, port)
  rescue Errno::ECONNREFUSED
    return false
  end
  return true
end
Run Code Online (Sandbox Code Playgroud)

如果端口是打开的,它的效果很好,但是它的缺点是它偶尔会坐下等待10-20秒然后最终超时,抛出ETIMEOUT异常(如果端口关闭).我的问题是:

可以将此代码修改为仅等待一秒钟(false如果我们当时没有得到任何回报,则返回)或者是否有更好的方法来检查给定端口上的给定端口是否打开?

编辑:只要它跨平台工作(例如,Mac OS X,*nix和Cygwin),调用bash代码也是可以接受的,尽管我更喜欢Ruby代码.

ruby bash port network-programming

43
推荐指数
5
解决办法
3万
查看次数

如何定义Ruby TCPSocket超时?

$ irb
1.9.3-p448 :001 > require 'socket'
 => true 
1.9.3-p448 :002 > TCPSocket.new('www.example.com', 111)
Run Code Online (Sandbox Code Playgroud)

Errno :: ETIMEDOUT:操作超时 - 连接(2)

问题:

  • 如何定义超时值TCPSocket.new
  • 如何正确捕获超时(或一般来说,套接字)异常?

ruby sockets

11
推荐指数
2
解决办法
8179
查看次数

标签 统计

ruby ×2

bash ×1

network-programming ×1

port ×1

sockets ×1