class Socket::Ifaddr - Documentation for Ruby 3.5 (original) (raw)

Socket::Ifaddr represents a result of getifaddrs() function.

Public Instance Methods

Source

static VALUE ifaddr_addr(VALUE self) { struct ifaddrs *ifa = get_ifaddrs(self); if (ifa->ifa_addr) return rsock_sockaddr_obj(ifa->ifa_addr, rsock_sockaddr_len(ifa->ifa_addr)); return Qnil; }

Returns the address of ifaddr. nil is returned if address is not available in ifaddr.

Source

static VALUE ifaddr_broadaddr(VALUE self) { struct ifaddrs *ifa = get_ifaddrs(self); if ((ifa->ifa_flags & IFF_BROADCAST) && ifa->ifa_broadaddr) return rsock_sockaddr_obj(ifa->ifa_broadaddr, rsock_sockaddr_len(ifa->ifa_broadaddr)); return Qnil; }

Returns the broadcast address of ifaddr. nil is returned if the flags doesn’t have IFF_BROADCAST.

Source

static VALUE ifaddr_dstaddr(VALUE self) { struct ifaddrs *ifa = get_ifaddrs(self); if ((ifa->ifa_flags & IFF_POINTOPOINT) && ifa->ifa_dstaddr) return rsock_sockaddr_obj(ifa->ifa_dstaddr, rsock_sockaddr_len(ifa->ifa_dstaddr)); return Qnil; }

Returns the destination address of ifaddr. nil is returned if the flags doesn’t have IFF_POINTOPOINT.

Source

static VALUE ifaddr_flags(VALUE self) { struct ifaddrs *ifa = get_ifaddrs(self); return IFAFLAGS2NUM(ifa->ifa_flags); }

Returns the flags of ifaddr.

The value is bitwise-or of Socket::IFF_* constants such as Socket::IFF_LOOPBACK.

Source

static VALUE ifaddr_ifindex(VALUE self) { struct ifaddrs *ifa = get_ifaddrs(self); unsigned int ifindex = if_nametoindex(ifa->ifa_name); if (ifindex == 0) { rb_raise(rb_eArgError, "invalid interface name: %s", ifa->ifa_name); } return UINT2NUM(ifindex); }

Returns the interface index of ifaddr.

Source

static VALUE ifaddr_inspect(VALUE self) { struct ifaddrs *ifa = get_ifaddrs(self); VALUE result;

result = rb_str_new_cstr("#<");

rb_str_append(result, rb_class_name(CLASS_OF(self)));
rb_str_cat2(result, " ");
rb_str_cat2(result, ifa->ifa_name);

if (ifa->ifa_flags)
    ifaddr_inspect_flags(ifa->ifa_flags, result);

if (ifa->ifa_addr) {
  rb_str_cat2(result, " ");
  rsock_inspect_sockaddr(ifa->ifa_addr,
      rsock_sockaddr_len(ifa->ifa_addr),
      result);
}
if (ifa->ifa_netmask) {
  rb_str_cat2(result, " netmask=");
  rsock_inspect_sockaddr(ifa->ifa_netmask,
      rsock_sockaddr_len(ifa->ifa_netmask),
      result);
}

if ((ifa->ifa_flags & IFF_BROADCAST) && ifa->ifa_broadaddr) {
  rb_str_cat2(result, " broadcast=");
  rsock_inspect_sockaddr(ifa->ifa_broadaddr,
      rsock_sockaddr_len(ifa->ifa_broadaddr),
      result);
}

if ((ifa->ifa_flags & IFF_POINTOPOINT) && ifa->ifa_dstaddr) {
  rb_str_cat2(result, " dstaddr=");
  rsock_inspect_sockaddr(ifa->ifa_dstaddr,
      rsock_sockaddr_len(ifa->ifa_dstaddr),
      result);
}

rb_str_cat2(result, ">");
return result;

}

Returns a string to show contents of ifaddr.

Source

static VALUE ifaddr_name(VALUE self) { struct ifaddrs *ifa = get_ifaddrs(self); return rb_str_new_cstr(ifa->ifa_name); }

Returns the interface name of ifaddr.

Source

static VALUE ifaddr_netmask(VALUE self) { struct ifaddrs *ifa = get_ifaddrs(self); if (ifa->ifa_netmask) return rsock_sockaddr_obj(ifa->ifa_netmask, rsock_sockaddr_len(ifa->ifa_netmask)); return Qnil; }

Returns the netmask address of ifaddr. nil is returned if netmask is not available in ifaddr.

Source

static VALUE ifaddr_vhid(VALUE self) { struct ifaddrs ifa = get_ifaddrs(self); if (ifa->ifa_data) return (INT2FIX(((struct if_data)ifa->ifa_data)->ifi_vhid)); else return Qnil; }

Returns the vhid address of ifaddr. nil is returned if there is no vhid.