2012-12-05 27 views
8

我目前正試圖找出一種方法來找到一個自由端口的數量來建立連接,理想情況下與boost :: asio。這個端口號將被用於監聽(並且只有這樣我才能打開一個套接字)。使用boost :: asio是否有一種便攜的方式來找出免費的端口號

粗略地說,有沒有辦法做到

tcp::resolver::query query("localhost", port); 

其中端口留空(將其設置爲0不起作用)

無以前見過的選擇是便攜式的,或有效率。

回答

9

處理這個問題的最好方法是讓套接字綁定到端口的時候讓操作系統選擇一個隨機的可用端口。告訴套接字綁定到端口0,然後查詢套接字以確定綁定的實際端口是否成功。不要試圖提前找到端口,然後綁定它,這會引入競爭條件。另一個套接字可能在您找到它之後,但在綁定之前阻塞該端口。

+0

這是我最初的目標,但只是通過它0不起作用,如問題 – user1018513

+0

中所述澄清:count << endpoint.port()<< endl; cout << endpoint.address()。to_string()<< endl; 返回0和本地主機地址。我需要能夠宣傳此uri,因此需要知道確切的端口號 – user1018513

+0

您如何初始化/獲取「端點」?請顯示您的實際代碼。 –

相關問題