所謂bind,就是指綁定本地接受端口。
指定ip,是為了分辨多ip主機。
bind是服務端調用的函數,綁定的是服務端的IP,假設服務端有多個網卡,即會有多個IP,這個時候我們可以選擇用bind綁定其中一個IP,那么服務端只接收該IP上某端口的數據。
如果bind綁定的是INADDR_ANY,即表示所有發送到服務器的這個端口,不管是哪個網卡/哪個IP地址接收到的數據,都由這個服務端進程進行處理。
在linux內核中,一個socket有兩個地址,一個本地地址,一個外部連接地址,。
如果使用udp協議,
在調用bind函數時,會把你要綁定的那個地址填到socket的本地地址那塊地方.你要設成0.0.0.0它就給你填成0.0.0.0
在udp使用bind函數只是為了不用每此發送數據都填充地址這一參數傳遞過程而已.
只是在你發送數據時才會根據情況把實際的ip地址填到發送的數據的相應位置.
在內核接收到一個數據包時,會接收到一個外部地址,在你調用讀函數時就把此地址讀取走了.
如過使用tcp協議時,
在調用bind函數時,會把本地地址填到socket的本地地址那塊地方.
在調用connect或則調用accecpt接收到連接時,回把外部地址那塊填上.。在讀寫數據時,只讀走數據,不會去讀去地址的。
所以在tcp協議下,想通過recvfrom,sendto(一般用於無連接的套接字)去獲取到外部連接的地址,是獲取不到的,你得到的結果可能是0.0.0.0,可以再accpet之后獲取到。