Prova cosi. devi mettere il codice che ti da errore dentro il try catch, invece come facevi tu mettevi solo la ServeOneClient.

Per quanto riguarda s.close() è un codice che non verrà mai eseguito perché sei in un while(true) da cui non uscirai mai, per cui il tuo programma non ha modo di finire.
Devi dare una condizione uscita dal while per eseguire quel codice. Oppure, dato che questo server credo che di avere capito che sia un thread, potresti fare in modo che il main che chiama questo thread lo interrompa, mentre il thread server cattura InterruptedException eseguendo in quella situazione la chiusura del socket.

Non so se sono stato molto chiaro. cmq il codice per le eccezioni è qui sotto.

codice:
public void run() {

try {
  ServerSocket s = new ServerSocket(6502); 
}catch(IOException e) {
  System.out.println("errore creazione socket");
}

do {
try {
  Socket socket = s.accept();
  new ServeOneClient(socket);
}
catch (IOException e) {
  try{ 
    socket.close();
  }catch(IOException ex){
    System.out.println("errore nella chiusura del socket" + ex);
  }
}
} while (true);

}