我們考慮簡單的客戶端——伺服器通訊的場景,其典型模式為:
在tcp層面表現為:
我們考慮一些異常情況,客戶端上:
選用《unix網路程式設計》(第一卷)中的伺服器——客戶端樣例程式。伺服器部分:
int main(int argc, char **ar**)
}
伺服器監聽9999埠,新鏈結建立後,發出當前時間,隨後呼叫close()關閉連線。
客戶端部分:
int main(int argc, char **ar**)
if (n < 0)
err_sys("read error");
exit(0);
}
我們修改客戶端呼叫close()的處理流程。當read()==0時,阻塞睡眠。等待一段時間後,傳送sigint使程序退出,相當於呼叫close()。注意到以下的現象:
orphan socket: 從應用程式來看,此條socket連線已經收發資料完畢,關閉了此連線,但是linux核心中為了完成正常的tcp協議(比如緩衝區中的資料)轉換,會在核心的tcp協議層繼續維護這些sock狀態,直至系統**。處於此種狀態下的socket就是orphan socket。分析:
npm install後發生了什麼
而我遇到的麻煩從想刪除node modules一直無法刪除開始,明明清除了程序,依然提示程式占用,或者按網上的教程通過命令列刪除,刪半天還在刪除中。後面解決方式是從vscode裡面刪除node modules,操作簡單高效。不過也因為這個麻煩,讓我想去整合npm install背後的故事。首當其衝c...
函式呼叫時發生了什麼
我們下面就來 一下高階語言中函式的呼叫和遞迴等性質是怎樣通過系統棧巧妙實現的。請看如下 int func b int arg b1,int arg b2 int func a int arg a1,int arg a2 int main int argc,char argv,char envp 這段...
函式呼叫時發生了什麼
第一步 函式呼叫 1 對實參表從右向左,一次計算出實參的值,並且將值壓棧。2 將函式呼叫語句 儲存到在棧中,以便函式呼叫完成後返回。壓棧 3 跳轉到函式體處。第二步 函式體執行 4 如果函式體中定義了變數,將變數壓棧 5 將每乙個形參以棧中對應的 實參值取代,執行函式體的功能體。6 將函式體中的變數...