This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
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
|
||||
Reference in New Issue
Block a user