-void ControlServer::real_run(void) {
- // FIXME se tiene que ir a la clase para poder frenarlo desde afuera.
- bool stop = false;
- char buf[BUFFER_SIZE];
- while (!stop) {
- stringstream sstr;
- while (!stop && socket.getline(buf, BUFFER_SIZE)) {
+void ControlServer::real_run(void) throw() {
+#ifdef DEBUG
+ cerr << __FILE__ << "(" << __LINE__ << ")"
+ << ": real_run()" << endl;
+#endif // DEBUG
+ while (!stop()) {
+ Command command;
+ try {
+ socket >> command;
+ } catch (const ios::failure& e) {
+ // TODO poner buenos codigos de error.
+ signal_error().emit(200000, "Se desconectó.");
+ return;
+ } catch (const sockerr& e) {
+ signal_error().emit(e.serrno(), e.errstr());
+ return;
+ // Si hay un error al parsear el comando, se envia una respuesta con el
+ // error.
+ } catch (const HTTPError& e) {