>>698
外からサーバソケットをクローズする前にフラグを立てれ。
IOException が発生した時にそのフラグが立っていれば 「正常終了」

private ServerSocket serverSocket = ...;
private boolean gracefulClose = false;

public void close(){
  gracefulClose = true;
  serverSocket.close();
}

public void run(){
  try{
    while(true){
      Socket socket = serverSocket.accept();
      …
    }
  } catch(IOException ex){
    if(! gracefulClose){
      throw ex;
    }
  }
  return;
}