123456789_123456789_123456789_123456789_123456789_

Class: DEBUGGER__::UI_UnixDomainServer

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Inherits: DEBUGGER__::UI_ServerBase
Defined in: lib/debug/server.rb

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(sock_dir: nil, sock_path: nil) ⇒ UI_UnixDomainServer

[ GitHub ]

  
# File 'lib/debug/server.rb', line 478

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

Instance Method Details

#accept

[ GitHub ]

  
# File 'lib/debug/server.rb', line 486

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