❤️強烈推薦人工智能學習網站❤️
最近在測試一個網絡程式的時候,每次調用read函數傳回立即傳回0,read是阻塞函數,沒有讀到資料竟然立即傳回0,有些奇怪。想了一下,和tcp的四次揮手有關,看代碼。
服務端:
用戶端:
makefile:
先啟動服務端,再啟動用戶端,然後再關掉用戶端,看列印。
服務端的read函數了解傳回,且傳回值為0。其原因是,用戶端關掉程序後發送FIN到服務端,然後系統給read函數發信号,告知read函數無資料,于是read函數馬上傳回。随後服務端每次調用read函數時都會收到系統發的這個信号,是以立即傳回0。