2014-04-29 49 views
0

在服务器应用程序中处理无限循环中的中断信号的最佳方法是什么?处理服务器应用程序中的中断信号的最佳方式?

我开发了简单的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() 
    } 
} 

但我没有发现任何东西.. :(

在每一个客户端线程我有无限循环太 - 等待客户端的命令......

所以,能不能请你告诉我,什么是处理它的最佳方法是什么? 谢谢!

回答

0

你有多个线程,每个都有自己的循环。你应该做的是确保你的线环经常检查如果他们应该被中止。因此,不要无限期地在acceptClient上进行阻止,请接受超时连接。当超时到期或连接被接受时,检查线程是否应该退出。

相关问题