X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/49850f467dae860e12c7851a2f8a79132f87721e..0521515ee87033f2bcdce2cffcafbecc960a71a6:/Server/src/tcpserver.cpp diff --git a/Server/src/tcpserver.cpp b/Server/src/tcpserver.cpp index 61d3e11..04fd8ba 100644 --- a/Server/src/tcpserver.cpp +++ b/Server/src/tcpserver.cpp @@ -66,11 +66,6 @@ TCPServer::TCPServer(const Connection::Port& port) throw(sockerr): cerr << __FILE__ << "(" << __LINE__ << ")" << ": port = " << port << endl; #endif // DEBUG - // FIXME - //cerr << "recvtimeout = " << socket.recvtimeout(1) << endl; - //cerr << "sendtimeout = " << socket.sendtimeout(1) << endl; - //cerr << "recvtimeout = " << socket.recvtimeout(1) << endl; - //cerr << "sendtimeout = " << socket.sendtimeout(1) << endl; socket.reuseaddr(true); socket.bind(port); #ifdef DEBUG @@ -98,7 +93,7 @@ void TCPServer::finish(void) { sockinetbuf suicida(sockbuf::sock_stream); suicida.connect(socket.localhost(), socket.localport()); } catch (const sockerr& e) { - // FIXME + // FIXME mejorar codigos de error. signal_error().emit(100000 + e.serrno(), string("No se pudo crear " "conexión 'suicida' para terminar el servidor: ") + e.errstr()); @@ -134,16 +129,20 @@ void TCPServer::real_run(void) throw() { try { connection = new_connection(socket.accept()); } catch (const sockerr& e) { // No se si el accept() puede fallar. - signal_error().emit(e.serrno(), e.errstr()); + signal_error().emit(e.serrno(), + string("Error creando conexión nueva: ") + e.errstr()); continue; // Supongo que puede seguir aceptando conexiones. } + if (!stop()) { + // Solo avisamos si la conexión que viene no es para matarnos. + _connection_opened(connection->get_host(), connection->get_port()); + } #ifdef DEBUG cerr << __FILE__ << "(" << __LINE__ << ")" << ": real_run(): connection = " << connection << endl; #endif // DEBUG Glib::Mutex::Lock lock(connections_mutex); - // XXX connections_mutex.lock(); connections.push_back(connection); #ifdef DEBUG cerr << __FILE__ << "(" << __LINE__ << ")" @@ -153,8 +152,6 @@ void TCPServer::real_run(void) throw() { cerr << "\t " << *i << endl; } #endif // DEBUG - // XXX connections_mutex.unlock(); // Si pongo el mutex antes del run(), - // muere. // Conecto la señal para cuando termina una conexión, borrarla. connection->signal_finished().connect(SigC::bind( SigC::slot_class(*this, &TCPServer::on_connection_finished), @@ -197,6 +194,10 @@ TCPServer::ConnectionInfoList TCPServer::get_connected(void) { return cl; } +TCPServer::SignalConnectionOpened& TCPServer::signal_connection_opened(void) { + return _connection_opened; +} + } // namespace Server } // namespace PlaQui