}
namebuf[0] = 0;
- err = getnameinfo (ss2sa (&ss), socklen (ss2sa (&ss)),
+ err = getnameinfo (ss2sa (&ss), sa_socklen (ss2sa (&ss)),
namebuf, sizeof (namebuf), 0, 0,
no_resolve ? NI_NUMERICHOST : 0U);
if (err) {
return sa->sa_family == AF_INET || sa->sa_family == AF_INET6;
}
-#if !defined (socklen)
-/* socklen_t socklen (struct sockaddr *) */
-# ifdef HAVE_SA_LEN
-# define socklen(X) ((X)->sa_len)
-# else
-# define socklen(X) ((X)->sa_family == AF_INET6 ? (socklen_t) sizeof (struct sockaddr_in6) : (X)->sa_family == AF_INET ? (socklen_t) sizeof (struct sockaddr_in) : (socklen_t) sizeof (struct sockaddr))
-# endif
-#endif
+/* Return the length of an IPv4 or IPv6 socket structure; abort if it is
+ * neither. */
+static inline socklen_t
+sa_socklen(struct sockaddr *sa)
+{
+ if (sa->sa_family == AF_INET6)
+ return sizeof(struct sockaddr_in6);
+ else if (sa->sa_family == AF_INET)
+ return sizeof(struct sockaddr_in);
+ else
+ abort();
+}
#endif /* SOCKET_UTILS_H */
{
static char buf[100];
char portbuf[10];
- if (getnameinfo(sa, socklen(sa),
+ if (getnameinfo(sa, sa_socklen(sa),
buf, sizeof(buf), portbuf, sizeof(portbuf),
NI_NUMERICHOST|NI_NUMERICSERV))
strlcpy(buf, "<unprintable>", sizeof(buf));
#endif /* IPV6_V6ONLY */
}
- if (bind(sock, addr, socklen(addr)) == -1) {
+ if (bind(sock, addr, sa_socklen(addr)) == -1) {
data->retval = errno;
com_err(data->prog, errno, _("Cannot bind server socket on %s"),
paddr(addr));
int err;
printf ("%p ", (void *) sa);
- err = getnameinfo (sa, socklen (sa), buf, sizeof (buf), 0, 0,
+ err = getnameinfo (sa, sa_socklen (sa), buf, sizeof (buf), 0, 0,
NI_NUMERICHOST);
if (err)
printf ("<getnameinfo error %d: %s> family=%d",
socklen_t len;
printf (" --> family %2d ", sa->sa_family);
- len = socklen (sa);
+ len = sa_socklen (sa);
err = getnameinfo (sa, len, hostbuf, (socklen_t) sizeof (hostbuf),
(char *) NULL, 0, NI_NUMERICHOST);
if (err) {
}
if (addrp)
memcpy (addrp, addr[0][j]->contents, addr[0][j]->length);
- err2 = getnameinfo (ss2sa(&ss), socklen (ss2sa (&ss)),
+ err2 = getnameinfo (ss2sa(&ss), sa_socklen (ss2sa (&ss)),
namebuf, sizeof (namebuf), 0, 0,
NI_NUMERICHOST);
if (err2 == 0)
if (port > ENDPORT) {
port = STARTPORT;
}
- res = bind(sd, sa, socklen(sa));
+ res = bind(sd, sa, sa_socklen(sa));
}
return (res);
}
if (bindresvport_sa(sock, sa)) {
sa_setport(sa, 0);
- (void)bind(sock, sa, socklen(sa));
+ (void)bind(sock, sa, sa_socklen(sa));
}
len = sizeof(struct sockaddr_storage);
if (getsockname(sock, sa, &len) != 0) {
if (bindresvport_sa(sock, sa)) {
sa_setport(sa, 0);
- (void)bind(sock, sa, socklen(sa));
+ (void)bind(sock, sa, sa_socklen(sa));
}
len = sizeof(struct sockaddr_storage);
if (getsockname(sock, sa, &len) != 0) {