在服务器应用程序中处理无限循环中的中断信号的最佳方法是什么?处理服务器应用程序中的中断信号的最佳方式?
我开发了简单的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()
}
}
但我没有发现任何东西.. :(
在每一个客户端线程我有无限循环太 - 等待客户端的命令......
所以,能不能请你告诉我,什么是处理它的最佳方法是什么? 谢谢!