class DEBUGGER__::UI_UnixDomainServer

def accept

def accept
  super # for fork
  case
  when @sock_path
  when sp = CONFIG[:sock_path]
    @sock_path = sp
  else
    @sock_path = DEBUGGER__.create_unix_domain_socket_name(@sock_dir)
  end
  ::DEBUGGER__.warn "Debugger can attach via UNIX domain socket (#{@sock_path})"
  vscode_setup @sock_path if CONFIG[:open] == 'vscode'
  begin
    Socket.unix_server_loop @sock_path do |sock, client|
      @sock_for_fork = sock
      @client_addr = client
      yield sock
    ensure
      sock.close
      @sock_for_fork = nil
    end
  rescue Errno::ECONNREFUSED => _e
    ::DEBUGGER__.warn "#{_e.message} (socket path: #{@sock_path})"
    if @sock_path.start_with? Config.unix_domain_socket_tmpdir
      # try on homedir
      @sock_path = Config.create_unix_domain_socket_name(unix_domain_socket_homedir)
      ::DEBUGGER__.warn "retry with #{@sock_path}"
      retry
    else
      raise
    end
  end
end

def initialize sock_dir: nil, sock_path: nil

def initialize sock_dir: nil, sock_path: nil
  @sock_path = sock_path
  @sock_dir = sock_dir || DEBUGGER__.unix_domain_socket_dir
  @sock_for_fork = nil
  super()
end