Client connect() 成功,Server accept() 返回 0,導致後續邏輯失敗。
C/C++ 中 = 賦值運算子優先級**低於** == 比較運算子。
錯誤寫法:
if (client_fd = accept(...) == -1) // 實際解析為 client_fd = (accept(...) == -1)
// 錯誤處理
accept() 返回的 socket descriptor (非負整數) 與 -1 比較結果為 0 (false),此 0 被賦值給 client_fd,導致後續以為連線失敗或 socket 為 0 (stdin)。
if ((client_fd = accept(...)) == -1) // 加括號提升優先級
// 錯誤處理
if ((fd = func()) == -1)。-Wparentheses (GCC/Clang) 或 /Wall (MSVC) 自動檢測。client_fd = accept(...);if (client_fd == -1) { ... }accept() 返回 0 是典型的 **運算子優先級錯誤**,加上括號或分行即可解決,養成良好編碼習慣可避免 90% 此類 Bug。