使用 while(1) { if(recv(c, recvBuf, 1000, 0)) printf(...); else break; } 時,客戶端斷開連接後循環未退出。
recv 返回 0 表示連接正常關閉(對方發送 FIN)。recv 返回 -1 表示發生錯誤(如連接重置、網絡不可達)。if(recv(...)) 將 -1 視為真值,導致進入 printf 而非 break。int ret;
while ((ret = recv(c, recvBuf, 1000, 0)) > 0) {
recvBuf[ret] = '\0'; // 確保字串結束
printf("%s\n", recvBuf);
}
if (ret == 0) printf("連接正常關閉\n");
else perror("recv 錯誤");
必須顯式判斷返回值:>0 繼續,==0 正常退出,<0 錯誤處理。