diff options
author | Noah Lavine <nlavine@haverford.edu> | 2011-02-13 15:31:32 -0500 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2011-02-13 22:08:44 +0100 |
commit | 482d311b3945a2b7133888b18f1fd18e472f8ce8 (patch) | |
tree | ca67080bc2d4322c15e75b77edabd2da4adfc43a | |
parent | e8ab529d57e2c3820e567737bd53c6e05e484c4d (diff) | |
download | guile-482d311b3945a2b7133888b18f1fd18e472f8ce8.tar.gz |
Set sockaddr_in.sin_len field when it exists.
* configure.ac: Detect when struct sockaddr_in has a sin_len field.
Remove obsolete comment.
* libguile/socket.c (scm_to_sockaddr, scm_fill_sockaddr): Set the
sin_len field in our struct sockaddr_in when it exists.
-rw-r--r-- | configure.ac | 5 | ||||
-rw-r--r-- | libguile/socket.c | 6 |
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 = |