2011-05-12 54 views
3

如果您撥打DRb.start_service(nil, some_obj),然後撥打DRb.uri,您將獲得本地URI(包括端口號),以便另一個進程可用來撥打電話。如何在Ruby中找到隨機打開的端口?

我正在尋找只是有一些代碼找到一個隨機可用端口並返回該端口號,而不是啓動一個成熟的DRb服務。有沒有一種簡單的方法來在Ruby中做到這一點?

+0

你應該將答案標記爲接受.. :) – Trevoke 2012-02-13 16:58:30

回答

18

還沒有嘗試過,但這可能工作。

http://wiki.tcl.tk/2230

的方法可以讓系統 自動分配的端口。對於
互聯網域和XNS 域,在調用bind()之前指定端口號爲 0要求 系統執行此操作。

另見http://www.ruby-doc.org/stdlib/libdoc/socket/rdoc/classes/Socket.html#M003723

require 'socket' 

# use Addrinfo 
socket = Socket.new(:INET, :STREAM, 0) 
socket.bind(Addrinfo.tcp("127.0.0.1", 0)) 
p socket.local_address #=> #<Addrinfo: 127.0.0.1:2222 TCP> 

注意在socket.bind呼叫使用端口0。預期的行爲是local_address將包含隨機打開的端口。

+0

這應該是公認的答案!謝謝。我確實需要什麼。 – Trevoke 2012-02-13 16:58:39

+0

建議!這在'rbx-2.5.2'下不起作用......'Addrinfo'無處可尋。 – digitalextremist 2015-06-06 03:25:34