Das erste Problem kannst du lösen indem du einfach sagst, die Clients müssen sich immer nach einem bestimmten Intervall beim Server melden sonst wird die Verbindung getrennt/als getrennt angenommen und der Client aus der Liste gelöscht.
Du kannst auch den Server alle ab und zu seine Clients "fragen" lassen ob sie noch da sind, wenn nicht innerhalb von z.B. drei Sekunden eine Antwort kommt => Client weg.
Oder der Client updatet die Liste ab und zu mit der Liste der aktiven Verbindungen die der Socket ja führt. Da haste auch schon alles drin von wegen Timeout und so.
//Edit: Lesen bildet
bist ja schon selbst draufgekommen.