1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 19:50:24 +02:00

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.
This commit is contained in:
Noah Lavine 2011-02-13 15:31:32 -05:00 committed by Andy Wingo
parent e8ab529d57
commit 482d311b39
2 changed files with 6 additions and 5 deletions

View file

@ -957,10 +957,7 @@ AC_CHECK_FUNCS(sethostent gethostent endhostent dnl
getnetbyaddr getnetbyname dnl getnetbyaddr getnetbyname dnl
inet_lnaof inet_makeaddr inet_netof hstrerror) inet_lnaof inet_makeaddr inet_netof hstrerror)
# struct sockaddr field sin_len is only present on BSD systems. AC_CHECK_MEMBERS([struct sockaddr_in.sin_len],,,
# 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],,,
[#ifdef HAVE_SYS_TYPES_H [#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h> #include <sys/types.h>
#endif #endif

View file

@ -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)); soka = (struct sockaddr_in *) scm_malloc (sizeof (struct sockaddr_in));
memset (soka, '\0', 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); soka->sin_len = sizeof (struct sockaddr_in);
#endif #endif
soka->sin_family = AF_INET; 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)); 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 = c_inet.sin_addr.s_addr =
htonl (scm_to_ulong (SCM_SIMPLE_VECTOR_REF (address, 1))); htonl (scm_to_ulong (SCM_SIMPLE_VECTOR_REF (address, 1)));
c_inet.sin_port = c_inet.sin_port =