Si no recuerdo mal el componente TServerSocket prococa una excepcion al poner la propiedad active a TRUE si el puerto ya esta en uso. Bien, pues solo hay que atrapar esa excepcion y volver a intentar con otro puerto:
Código Delphi
[-]
While not ServerSocket.Active do
try
ServerSocket.Active:= TRUE;
except
ServerSocket.Port:= ServerSocket.Port + 1;
end;
Creo que esto deberia funcionar, aunque ahora mismo no puedo probarlo.