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