new method PIClientServer::Server::closeAll()

PISignals::releaseSignals()
This commit is contained in:
2024-09-24 18:57:50 +03:00
parent 3641e636d2
commit 9eecbbab6e
4 changed files with 45 additions and 3 deletions

View File

@@ -90,6 +90,18 @@ void PIClientServer::Server::listen(PINetworkAddress addr) {
} }
void PIClientServer::Server::closeAll() {
clients_mutex.lock();
for (auto c: clients) {
c->aboutDelete();
c->destroy();
delete c;
}
clients.clear();
clients_mutex.unlock();
}
void PIClientServer::Server::setMaxClients(int new_max_clients) { void PIClientServer::Server::setMaxClients(int new_max_clients) {
max_clients = new_max_clients; max_clients = new_max_clients;
} }

View File

@@ -49,6 +49,8 @@ public:
void listen(PINetworkAddress addr); void listen(PINetworkAddress addr);
void listenAll(ushort port) { listen({0, port}); } void listenAll(ushort port) { listen({0, port}); }
void closeAll();
int getMaxClients() const { return max_clients; } int getMaxClients() const { return max_clients; }
void setMaxClients(int new_max_clients); void setMaxClients(int new_max_clients);
int clientsCount() const; int clientsCount() const;

View File

@@ -60,6 +60,33 @@ void PISignals::grabSignals(PIFlags<PISignals::Signal> signals_) {
} }
void PISignals::releaseSignals(PIFlags<Signal> signals_) {
if (signals_[PISignals::Interrupt]) signal(signalCode(PISignals::Interrupt), SIG_DFL);
if (signals_[PISignals::Illegal]) signal(signalCode(PISignals::Illegal), SIG_DFL);
if (signals_[PISignals::Abort]) signal(signalCode(PISignals::Abort), SIG_DFL);
if (signals_[PISignals::FPE]) signal(signalCode(PISignals::FPE), SIG_DFL);
if (signals_[PISignals::SegFault]) signal(signalCode(PISignals::SegFault), SIG_DFL);
if (signals_[PISignals::Termination]) signal(signalCode(PISignals::Termination), SIG_DFL);
#ifndef CC_VC
if (signals_[PISignals::UserDefined1]) signal(signalCode(PISignals::UserDefined1), SIG_DFL);
if (signals_[PISignals::UserDefined2]) signal(signalCode(PISignals::UserDefined2), SIG_DFL);
#endif
#ifndef WINDOWS
if (signals_[PISignals::Hangup]) signal(signalCode(PISignals::Hangup), SIG_DFL);
if (signals_[PISignals::Quit]) signal(signalCode(PISignals::Quit), SIG_DFL);
if (signals_[PISignals::Kill]) signal(signalCode(PISignals::Kill), SIG_DFL);
if (signals_[PISignals::BrokenPipe]) signal(signalCode(PISignals::BrokenPipe), SIG_DFL);
if (signals_[PISignals::Timer]) signal(signalCode(PISignals::Timer), SIG_DFL);
if (signals_[PISignals::ChildStopped]) signal(signalCode(PISignals::ChildStopped), SIG_DFL);
if (signals_[PISignals::Continue]) signal(signalCode(PISignals::Continue), SIG_DFL);
if (signals_[PISignals::StopProcess]) signal(signalCode(PISignals::StopProcess), SIG_DFL);
if (signals_[PISignals::StopTTY]) signal(signalCode(PISignals::StopTTY), SIG_DFL);
if (signals_[PISignals::StopTTYInput]) signal(signalCode(PISignals::StopTTYInput), SIG_DFL);
if (signals_[PISignals::StopTTYOutput]) signal(signalCode(PISignals::StopTTYOutput), SIG_DFL);
#endif
}
void PISignals::raiseSignal(PISignals::Signal signal) { void PISignals::raiseSignal(PISignals::Signal signal) {
raise(signalCode(signal)); raise(signalCode(signal));
} }
@@ -90,7 +117,7 @@ int PISignals::signalCode(PISignals::Signal signal) {
case PISignals::StopTTYInput: return SIGTTIN; case PISignals::StopTTYInput: return SIGTTIN;
case PISignals::StopTTYOutput: return SIGTTOU; case PISignals::StopTTYOutput: return SIGTTOU;
#endif #endif
default:; default: break;
} }
return 0; return 0;
} }
@@ -121,13 +148,13 @@ PISignals::Signal PISignals::signalFromCode(int signal) {
case SIGTTIN: return PISignals::StopTTYInput; case SIGTTIN: return PISignals::StopTTYInput;
case SIGTTOU: return PISignals::StopTTYOutput; case SIGTTOU: return PISignals::StopTTYOutput;
#endif #endif
default:; default: break;
} }
return PISignals::Termination; return PISignals::Termination;
} }
void PISignals::signal_event(int signal) { void PISignals::signal_event(int signal) {
if (PISignals::ret_func == 0) return; if (!PISignals::ret_func) return;
PISignals::ret_func(PISignals::signalFromCode(signal)); PISignals::ret_func(PISignals::signalFromCode(signal));
} }

View File

@@ -59,6 +59,7 @@ public:
// slot is any function format "void(PISignals::Signal)" // slot is any function format "void(PISignals::Signal)"
static void setSlot(SignalEvent slot) { ret_func = slot; } static void setSlot(SignalEvent slot) { ret_func = slot; }
static void grabSignals(PIFlags<PISignals::Signal> signals_); static void grabSignals(PIFlags<PISignals::Signal> signals_);
static void releaseSignals(PIFlags<PISignals::Signal> signals_);
static void raiseSignal(PISignals::Signal signal); static void raiseSignal(PISignals::Signal signal);
private: private: