summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac5
-rw-r--r--libguile/socket.c6
2 files changed, 6 insertions, 5 deletions
diff --git a/configure.ac b/configure.ac
index fd5067274..5b47701b7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -957,10 +957,7 @@ AC_CHECK_FUNCS(sethostent gethostent endhostent dnl
getnetbyaddr getnetbyname dnl
inet_lnaof inet_makeaddr inet_netof hstrerror)
-# struct sockaddr field sin_len is only present on BSD systems.
-# On 4.4BSD apparently a #define SIN_LEN exists, but on other BSD systems
-# (eg. FreeBSD 4.9) it doesn't and we must use this configure check
-AC_CHECK_MEMBERS([struct sockaddr.sin_len],,,
+AC_CHECK_MEMBERS([struct sockaddr_in.sin_len],,,
[#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
diff --git a/libguile/socket.c b/libguile/socket.c
index d8ab005f5..10597081d 100644
--- a/libguile/socket.c
+++ b/libguile/socket.c
@@ -798,7 +798,7 @@ scm_fill_sockaddr (int fam, SCM address, SCM *args, int which_arg,
soka = (struct sockaddr_in *) scm_malloc (sizeof (struct sockaddr_in));
memset (soka, '\0', sizeof (struct sockaddr_in));
-#ifdef HAVE_STRUCT_SOCKADDR_SIN_LEN
+#ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
soka->sin_len = sizeof (struct sockaddr_in);
#endif
soka->sin_family = AF_INET;
@@ -1134,6 +1134,10 @@ scm_to_sockaddr (SCM address, size_t *address_size)
memset (&c_inet, '\0', sizeof (struct sockaddr_in));
+#ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
+ c_inet.sin_len = sizeof (struct sockaddr_in);
+#endif
+
c_inet.sin_addr.s_addr =
htonl (scm_to_ulong (SCM_SIMPLE_VECTOR_REF (address, 1)));
c_inet.sin_port =