module WEBrick
module Utils
#
# Sets IO operations on +io+ to be non-blocking
def self?.set_non_blocking: (IO io) -> void
#
# Sets the close on exec flag for +io+
def self?.set_close_on_exec: (IO io) -> void
#
# Changes the process's uid and gid to the ones of +user+
def self?.su: (String user) -> void
#
# The server hostname
def self?.getservername: () -> String
#
# Creates TCP server sockets bound to +address+:+port+ and returns them.
#
# It will create IPV4 and IPV6 sockets on all interfaces.
def self?.create_listeners: (String host, Integer port) -> Array[TCPServer]
#
# Characters used to generate random strings
RAND_CHARS: String
#
# Generates a random string of length +len+
def self?.random_string: (Integer len) -> String
#
# Class used to manage timeout handlers across multiple threads.
#
# Timeout handlers should be managed by using the class methods which are
# synchronized.
#
# id = TimeoutHandler.register(10, Timeout::Error)
# begin
# sleep 20
# puts 'foo'
# ensure
# TimeoutHandler.cancel(id)
# end
#
# will raise Timeout::Error
#
# id = TimeoutHandler.register(10, Timeout::Error)
# begin
# sleep 5
# puts 'foo'
# ensure
# TimeoutHandler.cancel(id)
# end
#
# will print 'foo'
#
class TimeoutHandler
@queue: Thread::Queue
@watcher: Thread?
include Singleton
#
# Mutex used to synchronize access across threads
TimeoutMutex: Thread::Mutex
#
# Registers a new timeout handler
#
# +time+:: Timeout in seconds
# +exception+:: Exception to raise when timeout elapsed
def self.register: (Numeric seconds, singleton(Exception) exception) -> Integer
#
# Cancels the timeout handler +id+
def self.cancel: (Integer id) -> bool
def self.terminate: () -> Thread?
#
# Creates a new TimeoutHandler. You should use ::register and ::cancel
# instead of creating the timeout handler directly.
def initialize: () -> void
private
def watch: () -> bot
def watcher: () -> Thread
public
#
# Interrupts the timeout handler +id+ and raises +exception+
def interrupt: (Thread thread, Integer id, singleton(Exception) exception) -> nil
#
# Registers a new timeout handler
#
# +time+:: Timeout in seconds
# +exception+:: Exception to raise when timeout elapsed
def register: (Thread thread, Numeric time, singleton(Exception) exception) -> Integer
#
# Cancels the timeout handler +id+
def cancel: (Thread thread, Integer id) -> bool
#
def terminate: () -> Thread?
end
#
# Executes the passed block and raises +exception+ if execution takes more
# than +seconds+.
#
# If +seconds+ is zero or nil, simply executes the block
def self?.timeout: [T] (Numeric? seconds, ?singleton(Exception) exception) { (?Numeric) -> T } -> T
end
end