《Linux多執行緒服務端編程:使用muduo網路庫》4.7 中描述了socket fd串話的情形:
一個執行緒從fd=8收到了比較耗時的請求,它開始處理這個請求,并記住要把回應結果發給fd=8。但是在處理程序中,fd=8斷開連接,被關閉了,又有新的連接到來,碰巧使用了相同的fd=8。當執行緒完成回應的計算,把結果發給fd=8時,接收方已經物是人非 。
然后給出的解決辦法是使用RAII:
用Socket物件包裝檔案描述符, 所有對此檔案描述符的讀寫操作都通過此物件進行, 在物件的解構式里關閉檔案描述符。只要Socket還活著,就不會有其他的Socket物件有相同的檔案描述符。
我想請問,為啥使用該Socket物件可以防止串話?如果fd=8被動關閉,Socket物件并不會知道,下一個創建的Socket物件不還是用fd=8來初始化嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/239820.html
標籤:C++ 語言
上一篇:24演算法
下一篇:Java
