導航:首頁 > 操作系統 > closesocketlinux

closesocketlinux

發布時間:2022-09-08 09:46:57

1. linux python socket怎麼去除

原因是server端關掉了tcp連接,給client發送FIN信號,client的tcp層回了ACK,然後它的socket狀態就處於close_wait狀態。

實驗:

Python中,socket在send之前處於close_wait狀態,那麼該send不會報錯,並且執行完之後socket就closed了。再繼續調用send就會報錯。


推理:

說明python的socket.send在發送數據之前會檢查socket的狀態,如果處於close_wait,就執行close(socket)(應用層感覺不到哦),然後正常退出。所以再次send時,會拋出異常。


為什麼會一直處close_wait狀態?

當socket處於close_wait時,必須由應用層調用close(socket),發送FIN給server端才能變為LAST_ACK,接收到server端回應的ACK後,才變為CLOSED。如果應用層不調用close(),那麼socket會一直處於close_wait。[1]


如果我在python中不斷循環去調用socket.sendall(),那麼在socket變為close_wait後,通過socket.sendall()也會關閉socket,為什麼它還是一直處在close_wait狀態呢?

原因在於當sendall(data)的data比較大,在data被發送一半時,連接被server端斷掉了。那麼sendall(data)會一直卡在那,也就不會執行到sendall的開始處,去判斷socket狀態,確定是否關閉socket了。

簡單而言,就是socket在變為close_wait之後,根本沒有調用sendall()去關閉socket。


2. Linux下socket創建後,進程退出是否需要主動調用close關閉

進程退出 必須要父進程進行回收 要不然會產生孤兒進程造成資源浪費。也會對系統產生影響。推薦ibm出的unix環境高級編程 或者鳥哥的linux私房菜。linux跟unix差不多。希望能幫到你

3. socket在windows下和linux下的區別

下面大概分幾個方面進行羅列: Linux要包含 [cpp] #include #include #include #include 等頭文件,而windows下則是包含 [cpp] #include 。 Linux中socket為整形,Windows中為一個SOCKET。 Linux中關閉socket為close,Windows中為closesocket。 ...

閱讀全文

與closesocketlinux相關的資料

熱點內容
phpurl中文亂碼問題 瀏覽:889
程序員那麼可愛大結局陸漓產子 瀏覽:534
java如何從雲伺服器讀取本地文件 瀏覽:915
壓縮空氣軟管製作方法 瀏覽:909
天河三號演算法 瀏覽:924
php隊列教程 瀏覽:632
洪水命令 瀏覽:529
安卓怎麼弄成蘋果在線 瀏覽:435
谷歌web伺服器地址 瀏覽:898
安卓鎖屏圖片如何刪除 瀏覽:719
python3多進程編程 瀏覽:714
證明代碼是程序員寫的 瀏覽:397
演算法錯誤發現辦法 瀏覽:410
河南省醫院掛號是哪個app 瀏覽:629
冬日戀歌哪個APP能看 瀏覽:673
委內瑞拉加密貨 瀏覽:10
程序員寫日記哪個軟體好 瀏覽:108
加密機操作手冊 瀏覽:860
dos命令自動關閉 瀏覽:328
心田花開app在哪裡評價 瀏覽:449