J'ai besoin d'un moyen rapide de savoir si un port donné est ouvert avec Ruby. Je suis en train de bricoler avec ceci :
require 'socket'
def is_port_open?(ip, port)
begin
TCPSocket.new(ip, port)
rescue Errno::ECONNREFUSED
return false
end
return true
end
Cela fonctionne très bien si le port est ouvert, mais l'inconvénient de cette méthode est qu'elle peut parfois rester en attente pendant 10 à 20 secondes avant de s'arrêter, ce qui entraîne l'apparition d'un message d'erreur. ETIMEOUT
exception (si le port est fermé). Ma question est donc la suivante :
Peut-on modifier ce code pour qu'il n'attende qu'une seconde (et qu'il renvoie l'information) ? false
si nous ne recevons rien d'ici là) ou existe-t-il un meilleur moyen de vérifier si un port donné est ouvert sur un hôte donné ?
Edit : L'appel au code bash est également acceptable tant qu'il fonctionne sur plusieurs plates-formes (par exemple, Mac OS X, *nix et Cygwin), bien que je préfère le code Ruby.