public RunnableFuture<T> newTask(){
    return new FutureTask<T>(this){
      @SuppressWarnings("finally")
      public boolean cancel(boolean mayInterruptIfRunning){
        try {
          SocketUsingTask.this.cancel();
        }
        catch(Exception e) {
          // TODO: handle exception
        }
        finally{
          return super.cancel(mayInterruptIfRunning);
        }
      }
    };
  }