日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

关于winsock2中的connect函数?

發布時間:2023/12/2 综合教程 28 生活家
生活随笔 收集整理的這篇文章主要介紹了 关于winsock2中的connect函数? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1,只要client收到server的syn+ack,發送ack,client就認為三次握手建立完成,狀態變為Established。阻塞的connect調用成功返回;對于非阻塞的connect調用,都會立馬返回,使用select、poll或者epoll機制來判斷socket是否可寫來判定連接是否建立。
Established狀態下的client自然是可以發送數據給server的。

2,如果client的最后一個ack,中途丟失或者被server主動忽略或丟棄,server在定時器溢出后,會重發syn+ack,client向server發送數據,server并不會返回Rst。
要模擬這種場景,有兩種方式:1)收到server的syn+ack后,拔掉客戶端的網線;2)讓server端的accept隊列塞滿,主動丟棄ack。第一種場景模擬起來,難度比較大,于是我們采用第二種。
我采用go寫的server來模擬。將net.core.somaxconn設置為2(因為go中listen調用,傳入的即為系統的上限制),方便模擬。

客戶端發送10個connect請求。
測試結果中,反映了下面幾點:
1)客戶端在發送完ack后(13:48:52.999239),立馬(13:48:52.999879)開始發送數據;
2)發送的數據超時后,開始重試;
3)收到服務器重發的syn+ack后,客戶端發送ack;
4)當服務器的syn+ack重試次數超過系統設置值后,斷開連接,發送Rst包給客戶端。

結論:客戶端發送完最后一個ack后,就認為連接建立,connect成功!

3,accept成功?這個更簡單了,accept函數調用只是去accept隊列中取出一個連接而已,對服務器而言,只要接收了客戶端的ack(注意,不忽略不拋棄哦),狀態變更為Established了,而不是accept調用成功才變成Established的。

4,tcp的backlog隊列
linux在實現tcp協議棧的時候,采用了兩個隊列,syn和accept隊列。
當接收了對端的syn后,將其放入syn隊列;當接收了對端的ack后,將syn隊列中的連接轉移到accept隊列。

5,如果backlog隊列滿了,咋辦?如果服務器端Established了,但突然客戶端斷網了,服務器進入半連接,咋辦?如果客戶端不停的發送syn包咋辦?等等。。。很多問題。。這將會在我的

淺析TCP(上) - 曹東的文章 - 知乎專欄

中篇中詳細介紹,敬請期待!

總結

以上是生活随笔為你收集整理的关于winsock2中的connect函数?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。