UDP中使用connect的作用


整理一下.
1:UDP中可以使用connect系統調用


2:UDP中connect操作與TCP中connect操作有着本質區別。


TCP中調用connect會引起三次握手,client與server建立連結.UDP中調用connect內核僅僅把對端ip&port記錄下來.


3:UDP中可以多次調用connect,TCP只能調用一次connect.  


UDP多次調用connect有兩種用途:1,指定一個新的ip&port連結. 2,斷開和之前的ip&port的連結.


指定新連結,直接設置connect第二個參數即可.


斷開連結,需要將connect第二個參數中的sin_family設置成 AF_UNSPEC即可. 


4:UDP中使用connect可以提高效率.原因如下:


普通的UDP發送兩個報文內核做了如下:#1:建立連結#2:發送報文#3:斷開連結#4:建立連結#5:發送報文#6:斷開連結


采用connect方式的UDP發送兩個報文內核如下處理:#1:建立連結#2:發送報文#3:發送報文另外一點,  每次發送報文內核都由可能要做路由查詢.


5:采用connect的UDP發送接受報文可以調用send,write和recv,read操作.當然也可以調用sendto,recvfrom.


調用sendto的時候第五個參數必須是NULL,第六個參數是0.調用recvfrom,recv,read系統調用只能獲取到先前connect的ip&port發送的報文. 




UDP中使用connect的好處:1:會提升效率.前面已經描述了.2:高並發服務中會增加系統穩定性.原因:假設client A 通過非connect的UDP與server B,C通信.B,C提供相同服務.為了負載均衡,我們讓A與B,C交替通信.A 與 B通信IPa:PORTa <----> IPb:PORTb;


A 與 C通信IPa:PORTa' <---->IPc:PORTc 


假設PORTa 與 PORTa'相同了(在大並發情況下會發生這種情況),那么就有可能出現A等待B的報文,卻收到了C的報文.導致收報錯誤.解決方法內就是采用connect的UDP通信方式.在A中創建兩個udp,然后分別connect到B,C.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM