2015-12-19 48 views
0

如果本地端口正在偵聽或空閒,我想實現紅寶石檢查。 需要在自由端口的情況下腳本返回代碼是0並且在端口占用(監聽)返回代碼的情況下是1Ruby:檢查本地端口是否正在偵聽

重要的是這裏的端口是本地的而不是遠程的!對於遠程端口,我發現這個解決方案:Ruby - See if a port is open

我已經試過這個腳本:

ruby -e " 
    require 'socket' ; 
    server=TCPServer.new(25) ; 
    if server==nil ; 
     return 1 ; 
    else server.close ; 
    end 
" 

它返回自由港的情況下,「0」,但如果當口所佔它返回

-e:1:in `initialize': no implicit conversion of nil into String (TypeError) 
     from -e:1:in `new' 
     from -e:1:in `<main>' 

那麼如何糾正該行腳本?

+0

我無法重現你的錯誤。但是,我可以告訴你,當你不在方法內時,你不能「返回」。 –

回答

0

嘗試:

ruby -e "require 'socket'; 
begin 
    sock = Socket.new(Socket::Constants::AF_INET, Socket::Constants::SOCK_STREAM, 0); 
    sock.bind(Socket.pack_sockaddr_in(YOUR_PORT_HERE, '0.0.0.0')); 
    exit(0); 
rescue Errno::EADDRINUSE; 
    exit(1); 
end" 

(按實際端口號替換YOUR_PORT_HERE並刪除換行符如果你想)

相關問題