Ich entwickle eine winzige Server-Schleife für eine größere Software, aber es funktioniert nicht so, wie ich es möchte.Gestoppte Thread-Server-Schleife mit Boost :: Asio
Wenn der Benutzer in ".quit" Ich die Software wollen diese Gewinde Server Schleife stoppen:
try {
while (true) {
acceptor.accept(socket);
const size_t buffersize = 1024;
char data[buffersize+1] = {0};
data[socket.read_some(boost::asio::buffer(data,buffersize))] = '\0'; // Write data & place terminator
boost::thread asyncWriting(boost::bind(&myClass::writeToFile, this));
socket.close();
}
} catch(const boost::system::system_error& e) {
cout << "Boost System Error: " << e.what() << endl;
}
ich den Faden auf folgende Weise starten:
serverThread = boost::shared_ptr<boost::thread>(new boost::thread(boost::bind(&myClass::startServer, this)));
Aber ich habe Probleme stoppe den "Server". Egal, ob ich den Faden, schließen Sie die Buchse und/oder der Akzeptor oder brechen Sie das Programm-Boost führt den Fehler unterbrechen:
Bad file descriptor
Es ist nicht tritt jedes Mal, aber oft, und ich möchte, dass Problem beheben und ignoriere es nicht einfach.
Können Sie mir helfen, wie Sie das herunterfahren sauber?
es wäre hilfreich, wenn Sie einen Debugger anhängen könnte und uns sagen, wo die Ausnahme ausgelöst wird. Es gibt mehrere Asio-Methoden, die einen 'boost :: system :: system_error' mit dem Fehlercode boost :: system :: errc :: bad_file_descriptor auslösen können. –