2009-11-08 34 views
0

我有以下代碼:接近()與關斷()用的recv()

客戶端:

n=recv(sock,buf,1200,NULL); 

服務器端:

shutdown(sockk,SD_BOTH); 

的問題是,在客戶端recv返回0,意味着正常關機。我需要它返回-1(我不能更改客戶端,我需要適應我的代碼。)

我該怎麼做才能使它返回-1?

+0

爲什麼它應該返回-1?這是一個優雅的關機。 如果你不想正常關機,不要使用'shutdown()' – Hasturkun 2009-11-08 12:17:46

回答

0

不要從服務器調用shutdown()或close(),然後可以向客戶端進程發送一些信號。因此,recv()調用將返回-1,並將errno與EINTR一起設置。希望這可以幫助。

但我建議你不應該採用這樣的編碼習慣。 recv()可以返回0,+ ve數字和-1。它很好地處理所有這些情況。

2

我想通了。 使用SO_LINGER設置我的套接字並導致異常關機,現在它在shutdown()後返回-1。 謝謝