關於socket中被動方的close的執行

2021-07-26 02:29:52 字數 943 閱讀 3794

如果在主動方呼叫了close(socket),被動方沒有及時相應的執行close,而進行send則會出現異常關閉。。進行recv卻不會異常,能正常關閉。

比如我在被動方的close前加一句鍵盤輸入fgets然後進行send來進行停頓。。則會抓到如下包:

主動方(client)執行close之後,會抓到如下兩個包,此時主動方是fin_wait2,被動方是close_wait:

23:23:48.335377 ip localhost.43152 > localhost.6666: flags [f.], seq 1, ack 4, win 342, options [nop,nop,ts val 10147791 ecr 10146666], length 0

23:23:48.335968 ip localhost.6666 > localhost.43152: flags [.], ack 2, win 342, options [nop,nop,ts val 10147792 ecr 10147791], length 0

此時被動方(server)在**中加入了fgets和send,在鍵盤輸入後回車,則抓出如下兩個包,然後兩者均closed結束消失在netstat中,沒有出現time_wait,屬於異常退出。

23:23:51.447350 ip localhost.6666 > localhost.43152: flags [p.], seq 4:5, ack 2, win 342, options [nop,nop,ts val 10148569 ecr 10147791], length 1

23:23:51.447363 ip localhost.43152 > localhost.6666: flags [r], seq 1942903444, win 0, length 0

由此可見,在主動方呼叫了close之後,被動方應該相應的執行close來進行正常的四次揮手過程。若繼續呼叫send傳送資料則會產生異常關閉。

面試中被問到關於物件導向的理解

物件導向有三大特性 封裝 繼承和多型。封裝就是將類事物的屬性和行為抽象成乙個類,使其屬性私有化,行為公開化,提供了資料的隱秘性的同時,使 模組化。這樣做使得 的復用性更高。繼承則是進一步將類事物共有的屬性抽象成乙個父類,而每乙個子類是乙個特殊的父類 有父類的行為和屬性,也有自己特有的行為和屬性。這樣...

python cls方法 關於類方法中的cls

在python的類方法中,預設使用的第乙個引數是cls,而在例項方法中,一般使用self作為第乙個引數。兩處比較 1 比較一般類方法中的self和cls的區別 一般來說,使用某個類的方法,需要先將類例項化,賦予乙個物件才可以呼叫類中的方法,但是如果使用了 staticmethod 或 classme...

關於socket的疑問

一直感覺一端傳送資料,另一端接受資料很不可思議的事情,如果不能即時地讀走會導致什麼後果呢?其實socket讀出來的資料,你自己看著辦,裡面的資料是什麼格式你自己去解析,使用者可以基於 去實現你自己的協議 其實等價於客戶基於ip協議去實現自己的傳輸層協議 所以可以想想使用者是怎麼實現http協議的,h...