Skip to content

Esta función no está debidamente protegida contra excepciones #19

Description

@fedemgp

void Accepter::run() {
while (true) {
try {
Socket newsocket = server.accept();
Clienthandler* handler =
new Clienthandler(rootfile, std::move(newsocket), references);
clientlist.push_back(handler);
handler->start();
this->removeDeadClients();
} catch (SocketClosedException& e) {
break;
}
}
}

Como mencioné anteriormente, la STL puede lanzarte excepciones. Este catch solamente está protegiendo la excepción que creaste vos en la clase Socket. Como dije en las correcciones anteriores, cada función principal de cada hilo de ejecución, debería tener un bloque try catch de std::exception y de las elipsis. EN este caso particular, vos querés, y está bien eso, también tener un catch especifico de SocketClosedException para no imprimir el mensaje de error, porque es algo esperable.

try {
  while (true) {
    Socket newsocket = server.accept();
    Clienthandler* handler =
        new Clienthandler(rootfile, std::move(newsocket), references);
    clientlist.push_back(handler);
    handler->start();
    this->removeDeadClients();
  }
} catch (SocketClosedException& e) {
  break;
} catch (std::exception &e) {
  std::cerr << e.what() << std::endl;
} catch (...) {
   std::cerr << "error desconocido en el hilo aceptador" << std::endl;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions