Moin!
Zunächstmal: Wenn der ServerSocket nicht mehr zur Verfügung steht, weil der Server "abgestürzt" ist, dann landest du nicht im .OnDisconnect(), sondern im .OnError()-Ereignis und ggfs. gibt´s auch noch ne Exception.
Weiterhin: Wie willst du unterscheiden, ob der Server dich nicht einfach nur kicken wollte, wer sagt denn gleich, dass der immer auch sofort "abstürzt"? Problem ist also: Wie willst du einen ungewollten von einem gewollten Disconnect unterscheiden?
Ich rate davon ab, auto-reconnects zu versuchen; wenn man es nicht richtig anstellt (und dazu gehört auch eine Timeout-Behandlung!), dann führt das zu einer Endlosschleife mit überflüssigem Netzwerk-Traffic.
cu
Narses