#ifdef DEBUG
cerr << __FILE__ << ": destructor." << endl;
#endif // DEBUG
+ Glib::Mutex::Lock lock(connections_mutex);
+ for (ConnectionList::iterator con = connections.begin();
+ con != connections.end(); con++) {
+ (*con)->finish(true);
+ }
}
-TCPServer::TCPServer(int port): socket(sockbuf::sock_stream) {
+TCPServer::TCPServer(const Connection::Port& port): socket(sockbuf::sock_stream) {
#ifdef DEBUG
cerr << __FILE__ << ": 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.bind(port);
#ifdef DEBUG
cerr << __FILE__ << ": escuchando en " << socket.localhost()
#endif // DEBUG
}
+void TCPServer::finish(bool attach) {
+ //socket_mutex.lock();
+ socket.shutdown(sockbuf::shut_readwrite);
+ //socket_mutex.unlock();
+ Runnable::finish(attach);
+}
+
void TCPServer::on_connection_finished(Connection* connection) {
#ifdef DEBUG
cerr << __FILE__ << ": on_connection_finished(connection = "
}
}
+bool TCPServer::disconnect(const std::string& host, const Connection::Port& port) {
+#ifdef DEBUG
+ cerr << __FILE__ << ": disconnect(host = " << host
+ << ", port = " << port << ")" << endl;
+#endif // DEBUG
+ Glib::Mutex::Lock lock(connections_mutex);
+ for (ConnectionList::iterator con = connections.begin();
+ con != connections.end(); con++) {
+ if (((*con)->get_host() == host) && ((*con)->get_port() == port)) {
+ (*con)->finish();
+ return true;
+ }
+ }
+ return false;
+}
+
TCPServer::ConnectionInfoList TCPServer::get_connected(void) {
#ifdef DEBUG
cerr << __FILE__ << ": get_connected()" << endl;
#endif // DEBUG
- TCPServer::ConnectionInfoList con;
+ TCPServer::ConnectionInfoList cl;
Glib::Mutex::Lock lock(connections_mutex);
- for (ConnectionList::const_iterator i = connections.begin();
- i != connections.end(); i++) {
+ for (ConnectionList::const_iterator con = connections.begin();
+ con != connections.end(); con++) {
TCPServer::ConnectionInfo ci =
- { (*i)->get_peerhost(), (*i)->get_peerport() };
- con.push_back(ci);
+ { (*con)->get_host(), (*con)->get_port() };
+ cl.push_back(ci);
}
- return con;
+ return cl;
}
} // namespace Server