之前清除不必要的連接,我需要關閉套接字時的第一讀不符合預期的字符開始:服務器端的C++服務器代碼關閉套接字
char buff_truc[4] = {0};
read(mysock, buff_truc, sizeof buff_truc) ;
if (memcmp(buff_truc, "TRUC", 4) != 0) {
close(mysock);
}
它要求我讀的全部內容的可用傳入數據在關閉前忽略它們。
我想是這樣
char buff[8] = {0};
do {
lu = read(mysock, buff, sizeof buff);
} while (lu > 0);
但等待套接字超時告訴我它讀取零字節
嗯?在關閉它之前,您不必從套接字讀取數據。這麼做的意義何在?我不確定我明白。第一個片段應該沒問題(除非我使用'std :: string'和'=='而不是'memcmp')。 – freakish
大老闆告訴我這樣做......如果我們立即關閉,他懷疑客戶端有問題。在'close()'之前,我發現'shutdown()'的調用更加暴力! – Overnuts
我不知道如何讀取所有數據幫助客戶端。事實上,這是非常不安全的方法,因爲惡意客戶端將能夠無限期地保持服務器的忙碌(通過將數據推入循環中的套接字)。請嘗試說服大老闆,他應該在不調試服務器端的情況下調試客戶端。 – freakish