UDP是一個無連接的協議,因此socket函數connect似乎對UDP是沒有意義的,
然而事實不是這樣。
一個插口有幾個屬性,其中包括協議,本地地址/端口,目的地址/端口。
對於UDP來說,socket函數建立一個插口;bind函數指明了本地地址/端口
(包括ADDR_ANY,通配所有本地網絡接口);connect可以用來指明目的地
址/端口;
一般來說,UDP客戶端在建立了插口後會直接用sendto函數發送數據,需要
在sendto函數的參數裡指明目的地址/端口。如果一個UDP客戶端在建立了插
口後首先用connect函數指明了目的地址/端口,然後也可以用send函數發送
數據,因為此時send函數已經知道對方地址/端口,用getsockname也可以得
到這個信息。
UDP客戶端在建立了插口後會直接用sendto函數發送數據,還隱含了一個操作,
那就是在發送數據之前,UDP會首先為該插口選擇一個獨立的UDP端口(在1024
-5000之間),將該插口置為已綁定狀態。如果一個UDP客戶端在建立了插口後
首先用bind函數指明了本地地址/端口,也是可以的,這樣可以強迫UDP使用指
定的端口發送數據。(事實上,UDP無所謂服務器和客戶端,這裡的界限已經模
糊了。)
UDP服務器也可以使用connect,如上面所述,connect可以用來指明目的地址
/端口;這將導致服務器只接受特定一個主機的請求。