docs: @Override
      public void close() {
          // Use monitor to avoid race between external close and handler thread run()
          synchronized (closeMonitor) {
              // Close and clear streams, sockets etc.
              if (socket != null) {
                  try {
                      // Terminates thread blocking on socket read
                      // and automatically closed depending streams
                      socket.close();
                  } catch (IOException e) {
                      log.warn("Can not close socket", e);
                  } finally {
                      socket = null;
                  }
              }
  
              // Clear user data
              session = null;
              response = null;
          }
      }