<URL: http://bugs.freeciv.org/Ticket/Display.html?id=39613 >

When a user which is detached loses connection or leaves, the client is
not informed of it. The connection is still in the visible connection
list. I fixed this bug a long time ago for warserver by a hack. You
should resolve this by a good code.

I added in sernet.c:
void close_connection(struct connection *pconn)
  while (timer_list_size(pconn->server.ping_timers) > 0) {
    struct timer *timer = timer_list_get(pconn->server.ping_timers, 0);

    timer_list_unlink(pconn->server.ping_timers, timer);
  assert(timer_list_size(pconn->server.ping_timers) == 0);

  /* safe to do these even if not in lists: */
  conn_list_unlink(game.all_connections, pconn);
  conn_list_unlink(game.est_connections, pconn);

  pconn->player = NULL;
  pconn->access_level = ALLOW_NONE;

+  send_conn_info(pconn->self, game.est_connections);
to be sure the connection will be removed in the client list.
(send_conn_info(&pconn->self, &game.est_connections); in 2.0)

Freeciv-dev mailing list

Reply via email to