summaryrefslogtreecommitdiff
path: root/ext/socket/socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/socket/socket.c')
-rw-r--r--ext/socket/socket.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/ext/socket/socket.c b/ext/socket/socket.c
index 8172ae4ddb..8c5ffed836 100644
--- a/ext/socket/socket.c
+++ b/ext/socket/socket.c
@@ -1584,11 +1584,22 @@ sockaddr_len(struct sockaddr *addr)
return (socklen_t)sizeof(struct sockaddr_un);
#endif
+#ifdef AF_PACKET
+ case AF_PACKET:
+ return (socklen_t)(offsetof(struct sockaddr_ll, sll_addr) + ((struct sockaddr_ll *)addr)->sll_halen);
+#endif
+
default:
return (socklen_t)(offsetof(struct sockaddr, sa_family) + sizeof(addr->sa_family));
}
}
+socklen_t
+rsock_sockaddr_len(struct sockaddr *addr)
+{
+ return sockaddr_len(addr);
+}
+
static VALUE
sockaddr_obj(struct sockaddr *addr, socklen_t len)
{
@@ -1622,6 +1633,12 @@ sockaddr_obj(struct sockaddr *addr, socklen_t len)
return rsock_addrinfo_new(addr, len, addr->sa_family, 0, 0, Qnil, Qnil);
}
+VALUE
+rsock_sockaddr_obj(struct sockaddr *addr, socklen_t len)
+{
+ return sockaddr_obj(addr, len);
+}
+
#endif
#if defined(HAVE_GETIFADDRS) || (defined(SIOCGLIFCONF) && defined(SIOCGLIFNUM) && !defined(__hpux)) || defined(SIOCGIFCONF) || defined(_WIN32)