Method: Socketry::UDP::Socket#initialize

Defined in:
lib/socketry/udp/socket.rb

#initialize(addr_family: :ipv4, read_timeout: Socketry::Timeout::DEFAULT_TIMEOUTS[:read], write_timeout: Socketry::Timeout::DEFAULT_TIMEOUTS[:write], timer: Socketry::Timeout::DEFAULT_TIMER.new, resolver: Socketry::Resolver::DEFAULT_RESOLVER, socket_class: ::UDPSocket) ⇒ Socketry::UDP::Socket

Create a new UDP socket

Parameters:

  • addr_family (:ipv4, :ipv6) (defaults to: :ipv4)

    (default :ipv4) address family for this socket

  • read_timeout (Numeric) (defaults to: Socketry::Timeout::DEFAULT_TIMEOUTS[:read])

    Seconds to wait before an uncompleted read errors

  • write_timeout (Numeric) (defaults to: Socketry::Timeout::DEFAULT_TIMEOUTS[:write])

    Seconds to wait before an uncompleted write errors

  • timer (Object) (defaults to: Socketry::Timeout::DEFAULT_TIMER.new)

    Time interval object to use for measuring timeouts

  • resolver (Object) (defaults to: Socketry::Resolver::DEFAULT_RESOLVER)

    Resolver object to use for resolving DNS names

  • socket_class (Object) (defaults to: ::UDPSocket)

    Underlying socket class which implements I/O ops

Raises:

  • (ArgumentError)

    an invalid argument was given



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/socketry/udp/socket.rb', line 60

def initialize(
  addr_family: :ipv4,
  read_timeout: Socketry::Timeout::DEFAULT_TIMEOUTS[:read],
  write_timeout: Socketry::Timeout::DEFAULT_TIMEOUTS[:write],
  timer: Socketry::Timeout::DEFAULT_TIMER.new,
  resolver: Socketry::Resolver::DEFAULT_RESOLVER,
  socket_class: ::UDPSocket
)
  @addr_family = case addr_family
                 when :ipv4 then ::Socket::AF_INET
                 when :ipv6 then ::Socket::AF_INET6
                 when ::Socket::AF_INET, ::Socket::AF_INET6 then addr_family
                 else raise ArgumentError, "invalid address family: #{addr_family.inspect}"
                 end

  @socket        = socket_class.new(@addr_family)
  @read_timeout  = read_timeout
  @write_timeout = write_timeout
  @resolver      = resolver

  start_timer(timer)
end