Explicación detallada:
Tu hacias un .Free del SSocket, se libera pero no queda apuntando a nil el valor de SSocket, por tanto, cuando el Aowner se destruye, accede a SSocket, ve que es distinto de nil, e intenta liberar una zona de memoria que ya ha sido liberada => Access Violation.
Si hubieras usado Freeandnil(SSocket), cuando el Aowner va a destruirlo con .Free, se detecta que SSocket es = nil, y por tanto, no se destruye,
No hay Access Violation.
Moraleja: Haz un curso de autoControl y quitate la manía que tienes con FreeAndNil
Un saludo