2017-01-04 444 views
0

之前清除不必要的連接,我需要關閉套接字時的第一讀不符合預期的字符開始:服務器端的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); 

但等待套接字超時告訴我它讀取零字節

+1

嗯?在關閉它之前,您不必從套接字讀取數據。這麼做的意義何在?我不確定我明白。第一個片段應該沒問題(除非我使用'std :: string'和'=='而不是'memcmp')。 – freakish

+0

大老闆告訴我這樣做......如果我們立即關閉,他懷疑客戶端有問題。在'close()'之前,我發現'shutdown()'的調用更加暴力! – Overnuts

+1

我不知道如何讀取所有數據幫助客戶端。事實上,這是非常不安全的方法,因爲惡意客戶端將能夠無限期地保持服務器的忙碌(通過將數據推入循環中的套接字)。請嘗試說服大老闆,他應該在不調試服務器端的情況下調試客戶端。 – freakish

回答

0

如果你是不是真的對你接收到的數據的關注。(可接收的緩衝區無法啓動與「TRUC」)。您可以關閉套接字。

我想只有在關閉套接字之前類似

是您在客戶端嘗試?

+0

我只編碼服務器端。 – Overnuts

+1

好。如果你不打擾那些不是以你指定的序列開始的數據。您可以關閉套接字。 – ban