在服務器應用程序中處理無限循環中的中斷信號的最佳方法是什麼?處理服務器應用程序中的中斷信號的最佳方式?
我開發了簡單的FTP服務器,每個客戶端都有自己的線程。而現在,我想要做的是處理中斷信號,然後中斷客戶端線程向量中的每個線程。 在每個線程中,我都希望有機會在發送/接收某個文件並手動關閉套接字時向客戶端發送一些響應。在主線程中,我只想記錄該服務器被中止並關閉服務器套接字。
我有一個想法實現我的服務器類FTPServer像單身人士,並在signal()
調用一個函數調用方法abort()
的FTPServer實例。但我不知道當主要的死循環仍在運行時它將會執行什麼操作,並且accept()
仍在等待新的客戶端...並且此模式我不能在客戶端線程中使用,因爲不僅有一個實例..
我的方法是:
void FTPServer::run() {
while (1){
int cliFd = TCPController::acceptClient (m_serverFD);
serveNewClient(cliFd);
}
}
void FTPServer::serveNewClient(int clientFD){
m_client_threads.push_back(thread(&FTPServer::clientThread, *this, clientFD));
}
void FTPServer::clientThread(int clientFD){
ClientThread client(clientFD);
client.run();
}
所以我要處理的中斷信號,斷裂主要無限循環,並呼籲中止()方法(?)。 我正在尋找這樣的事情:
void FTPServer::run() {
try{
while (1){
int cliFd = TCPController::acceptClient (m_serverFD);
serveNewClient(cliFd);
}
catch(RuntimeException & e){
this.abort()
}
}
但我沒有發現任何東西.. :(
在每一個客戶端線程我有無限循環太 - 等待客戶端的命令......
所以,能不能請你告訴我,什麼是處理它的最佳方法是什麼? 謝謝!