Class: Net::Ping::UDP

### Home Classes Methods

### In Files

- lib/net/ping/udp.rb

### Parent

Net::Ping

### Methods

- ::new
- ::service_check
- ::service_check=
- #bind
- #data=
- #ping
- #ping?
- #pingecho

### Files

- ping.txt

### Class/Module Index

Quicksearch

- Net
- Net::Ping
- Net::Ping::External
- Net::Ping::HTTP
- Net::Ping::ICMP
- Net::Ping::TCP
- Net::Ping::UDP
- Net::Ping::WMI
- Object

No matching classes.

# Net::Ping::UDP

The Ping::UDP class encapsulates methods for UDP pings.

### Constants

MAX_DATA

  The maximum data size that can be sent in a UDP ping.

### Attributes

data[R]

The data to send to the remote host. By default this is 'ping'. This should be MAX_DATA size characters or less.

### Public Class Methods

new(host=nil, port=nil, timeout=5) click to toggle source

Creates and returns a new Ping::UDP object. This is effectively identical to its superclass constructor.

    # File lib/net/ping/udp.rb, line 42
    def initialize(host=nil, port=nil, timeout=5)
      @data = 'ping'

      super(host, port, timeout)

      @bind_host = nil
      @bind_port = nil
    end

service_check() click to toggle source

Returns whether or not the connect behavior should enforce remote service availability as well as reachability. The default is true.

    # File lib/net/ping/udp.rb, line 13
    def self.service_check
      @@service_check
    end

service_check=(bool) click to toggle source

Set whether or not the connect behavior should enforce remote service availability as well as reachability. If set to false then Errno::ECONNREFUSED or Errno::ECONNRESET will be considered a successful ping, meaning no actual data handshaking is required. By default, if either of those errors occurs it is considered a failed ping.

    # File lib/net/ping/udp.rb, line 24
    def self.service_check=(bool)
      unless bool.kind_of?(TrueClass) || bool.kind_of?(FalseClass)
        raise ArgumentError, 'argument must be true or false'
      end
      @@service_check = bool
    end

### Public Instance Methods

bind(host, port) click to toggle source

Associates the local end of the UDP connection with the given `host` and `port`. This is essentially a wrapper for UDPSocket#bind.

    # File lib/net/ping/udp.rb, line 66
    def bind(host, port)
      @bind_host = host
      @bind_port = port
    end

data=(string) click to toggle source

Sets the data string sent to the remote host. This value cannot have a size greater than MAX_DATA.

    # File lib/net/ping/udp.rb, line 54
    def data=(string)
       if string.size > MAX_DATA
         err = "cannot set data string larger than #{MAX_DATA} characters"
         raise ArgumentError, err
       end

       @data = string
    end

ping(host = @host) click to toggle source

Sends a simple text string to the host and checks the return string. If the string sent and the string returned are a match then the ping was successful and true is returned. Otherwise, false is returned.

    # File lib/net/ping/udp.rb, line 75
    def ping(host = @host)
      super(host)

      bool  = false
      udp   = UDPSocket.open
      array = []

      if @bind_host
        udp.bind(@bind_host, @bind_port)
      end

      start_time = Time.now

      begin
        Timeout.timeout(@timeout){
          udp.connect(host, @port)
          udp.send(@data, 0)
          array = udp.recvfrom(MAX_DATA)
        }
      rescue Errno::ECONNREFUSED, Errno::ECONNRESET => err
        if @@service_check
          @exception = err
        else
          bool = true
        end
      rescue Exception => err
        @exception = err
      else
        if array[0] == @data
          bool = true
        end
      ensure
        udp.close if udp
      end

      # There is no duration if the ping failed
      @duration = Time.now - start_time if bool

      bool
    end

Also aliased as: ping?, pingecho
ping?(host = @host) click to toggle source
Alias for: ping
pingecho(host = @host) click to toggle source
Alias for: ping

[Validate]

Generated with the Darkfish Rdoc Generator 2.