class NETSNMP::Session::Transport

Constants

MAXPDUSIZE

Public Class Methods

new(host, port, timeout:) click to toggle source
# File lib/netsnmp/session.rb, line 76
def initialize(host, port, timeout:)
  @socket = UDPSocket.new
  @destaddr = Socket.sockaddr_in(port, host)
  @timeout = timeout
end

Public Instance Methods

close() click to toggle source
# File lib/netsnmp/session.rb, line 82
def close
  @socket.close
end
recv(bytesize = MAXPDUSIZE) click to toggle source
# File lib/netsnmp/session.rb, line 97
def recv(bytesize = MAXPDUSIZE)
  perform_io do
    datagram, = @socket.recvmsg_nonblock(bytesize, Socket::MSG_DONTWAIT)
    datagram
  end
end
send(payload) click to toggle source
# File lib/netsnmp/session.rb, line 86
def send(payload)
  write(payload)
  recv
end
write(payload) click to toggle source
# File lib/netsnmp/session.rb, line 91
def write(payload)
  perform_io do
    @socket.sendmsg(payload, Socket::MSG_DONTWAIT, @destaddr)
  end
end

Private Instance Methods

perform_io() { || ... } click to toggle source
# File lib/netsnmp/session.rb, line 106
def perform_io
  loop do
    begin
      return yield
    rescue IO::WaitReadable
      wait(:wait_readable)
    rescue IO::WaitWritable
      wait(:wait_writable)
    end
  end
end
wait(mode) click to toggle source
# File lib/netsnmp/session.rb, line 118
def wait(mode)
  return if @socket.__send__(mode, @timeout)
  raise Timeout::Error, "Timeout after #{@timeout} seconds"
end