類別 Socket::Ifaddr
Socket::Ifaddr
代表 getifaddrs() 函式的結果。
公開實例方法
addr → addrinfo 按一下以切換來源
傳回 ifaddr 的位址。如果 ifaddr 中沒有提供位址,則傳回 nil。
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; }
broadaddr → addrinfo 按一下以切換來源
傳回 ifaddr 的廣播位址。如果旗標沒有 IFF_BROADCAST,則傳回 nil。
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; }
dstaddr → addrinfo 按一下以切換來源
傳回 ifaddr 的目的地位址。如果旗標沒有 IFF_POINTOPOINT,則傳回 nil。
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; }
flags → integer 按一下以切換來源
傳回 ifaddr 的旗標。
static VALUE ifaddr_flags(VALUE self) { struct ifaddrs *ifa = get_ifaddrs(self); return IFAFLAGS2NUM(ifa->ifa_flags); }
ifindex → integer 按一下以切換來源
傳回 ifaddr 的介面索引。
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); }
inspect → string 按一下以切換來源
傳回一個字串來顯示 ifaddr 的內容。
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; }
name → string 按一下以切換來源
傳回 ifaddr 的介面名稱。
static VALUE ifaddr_name(VALUE self) { struct ifaddrs *ifa = get_ifaddrs(self); return rb_str_new_cstr(ifa->ifa_name); }
netmask → addrinfo 按一下以切換來源
傳回 ifaddr 的網路遮罩位址。如果 ifaddr 中沒有提供網路遮罩,則傳回 nil。
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; }
vhid → Integer 按一下以切換來源
傳回 ifaddr 的 vhid 位址。如果沒有 vhid,則傳回 nil。
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; }