0
C信號(sigpipe,sighup)我必須處理SIGHUP和SIGPIPE信號,以避免通過Socket TCP連接的客戶端關閉終端(GUI的[X])不符合' t關閉或崩潰SERVER。通過Socket
我在客戶端上設置一個sigup處理這樣
void sighup()
{
signal(SIGHUP, SIG_IGN);
system("echo SIGHUP received>>log.txt");
close(socket);
exit(0);
}
在服務器上我給自己定一個SIGPIPE處理這樣
signal(SIGPIPE,SIG_IGN);
但是,如果客戶端關閉窗口的終端,服務器循環。
有什麼想法? 謝謝你的好意支持
循環爲什麼/如何?您在這裏沒有提供足夠的信息。我不得不猜測,一旦套接字被拋棄,在套接字上進行的讀或寫調用總是立即返回,因爲現在讀/寫錯誤。您需要檢測並丟棄套接字或採取適當的措施......如果發生了什麼...... – Michael
如果您忽略SIGPIPE,寫入操作將返回一個錯誤,將'errno'設置爲'EINTR'。只要您持續謹慎地測試您的寫入操作是否成功(並在不成功時採取適當的操作 - 這意味着停止嘗試寫入),這很有用。否則,這是一場災難。 –
我犯了一個錯誤,我將把所有的檢查全部寫入並讀取錯誤。但是,無論如何,這是處理這種情況的正確方法嗎? 客戶端關閉終端 服務器需要繼續 您有任何想法建議我嗎? 謝謝 –