SOCKET繫結時,埠和位址為0解析

2021-07-23 16:33:10 字數 486 閱讀 1059

在socket程式設計中,要做伺服器時我們通常要使用bind函式來繫結乙個ip和port。

但有時在使用bing函式時發現,addr中的ip或者port為0的情況。

在《unix網路程式設計》這本書中提到:「如果乙個tcp客戶或者伺服器未曾呼叫bind**乙個埠,當呼叫connect或listen時,核心就要為相應的套接字選擇乙個臨時介面。」

可見bind函式其實可有可無的,只是當需要確定ip或者埠的時候,我們才不得不需要使用bind函式來進行繫結而已。

而對於addr中ip或者port為0時,實際上也是系統核心臨時分配的ip和port。

port=0;

當我們不需要確定的服務埠時,我們就可以讓ip=0;這樣,核心就會為我們隨機乙個埠,並且這個埠應該也能完成我們想要的業務,同時我們也不用去考慮埠重用的問題了。

ip=inaddr_any;

當我們只有乙個ip的時候,ip=inaddr_any(0)實際上核心也只能給我們這乙個ip了

socket 程式設計的埠和位址復用

int opt 1 if setsockopt sockfd,sol socket,so reuseaddr,const void opt,sizeof opt so reuseaddr允許啟動乙個監聽伺服器並 其眾所周知埠,即使以前建立的將此埠用做他們的 本地埠的連線仍存在。這通常是重啟監聽伺服器...

socket位址和埠重用(造成bind出錯)

其實這個問題在richard stevens的 unix網路程式設計指南 卷一里有很詳細的 解答 中文版p166 168頁 這裡我只是寫幾個基本的例子來驗證這個問題。首先宣告乙個問題 當兩個socket的address和port相衝突,而你又想重用地 址和埠,則舊的socket和新的socket都要...

位址和埠

tt同學吃飯,談談工作,談談生活,tt同學說,沒有上課,面對如此上進的孩子,好吧,補上。總會想,假如tt不搞技術,做了銷售,會需要了解這些內容嗎,也許還是知道一些更好吧,和那些做技術起家的人比起來,tt除了技術,全部秒殺對手,我也試著問過啟發tt,tt有的反饋,有靈性,有勇氣,所以,我果斷覺得,這個...