Socket::Ifaddr
class Socket::Ifaddr
Parent:Data
Socket :: Ifaddr表示getifaddrs()函数的结果。
公共实例方法
addr → addrinfo Show source
返回ifaddr
的地址。如果地址在ifaddr中
不可用,则返回nil 。
static VALUE
ifaddr_addr(VALUE self)
{
rb_ifaddr_t *rifaddr = get_ifaddr(self
struct ifaddrs *ifa = rifaddr->ifaddr;
if (ifa->ifa_addr)
return rsock_sockaddr_obj(ifa->ifa_addr, rsock_sockaddr_len(ifa->ifa_addr)
return Qnil;
}
broadaddr → addrinfo Show source
返回ifaddr
的广播地址。如果标志中没有IFF_BROADCAST,则返回nil。
static VALUE
ifaddr_broadaddr(VALUE self)
{
rb_ifaddr_t *rifaddr = get_ifaddr(self
struct ifaddrs *ifa = rifaddr->ifaddr;
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 Show source
返回ifaddr
的目标地址。如果标志中没有IFF_POINTOPOINT,则返回nil。
static VALUE
ifaddr_dstaddr(VALUE self)
{
rb_ifaddr_t *rifaddr = get_ifaddr(self
struct ifaddrs *ifa = rifaddr->ifaddr;
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 Show source
返回ifaddr
的标志。
static VALUE
ifaddr_flags(VALUE self)
{
rb_ifaddr_t *rifaddr = get_ifaddr(self
struct ifaddrs *ifa = rifaddr->ifaddr;
return IFAFLAGS2NUM(ifa->ifa_flags
}
ifindex → integer Show source
返回ifaddr
的接口索引。
static VALUE
ifaddr_ifindex(VALUE self)
{
rb_ifaddr_t *rifaddr = get_ifaddr(self
struct ifaddrs *ifa = rifaddr->ifaddr;
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 Show source
返回一个字符串以显示ifaddr的
内容。
static VALUE
ifaddr_inspect(VALUE self)
{
rb_ifaddr_t *rifaddr = get_ifaddr(self
struct ifaddrs *ifa;
VALUE result;
ifa = rifaddr->ifaddr;
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 Show source
返回ifaddr
的接口名称。
static VALUE
ifaddr_name(VALUE self)
{
rb_ifaddr_t *rifaddr = get_ifaddr(self
struct ifaddrs *ifa = rifaddr->ifaddr;
return rb_str_new_cstr(ifa->ifa_name
}
netmask → addrinfo Show source
返回ifaddr
的网络掩码地址。如果ifaddr中的
网络掩码不可用,则返回nil 。
static VALUE
ifaddr_netmask(VALUE self)
{
rb_ifaddr_t *rifaddr = get_ifaddr(self
struct ifaddrs *ifa = rifaddr->ifaddr;
if (ifa->ifa_netmask)
return rsock_sockaddr_obj(ifa->ifa_netmask, rsock_sockaddr_len(ifa->ifa_netmask)
return Qnil;
}