diff --git a/configure.in b/configure.in index 296380e4..3963104d 100644 --- a/configure.in +++ b/configure.in @@ -140,6 +140,24 @@ HAVE_PRCTL="-DHAVE_PRCTL" fi AC_SUBST(HAVE_PRCTL) +HAVE_SOCKADDR_LEN="" +AC_MSG_CHECKING([for sockaddr.sa_len presence]) +AC_TRY_COMPILE([ +#include +],[ +struct sockaddr saddr; +saddr.sa_len = sizeof(struct sockaddr); +], +have_sockaddr_len="yes", +have_sockaddr_len="no" +) +if [[ "$have_sockaddr_len" = "yes" ]]; then +HAVE_SOCKADDR_LEN="-DHAVE_SOCKADDR_LEN" +fi +AC_SUBST(HAVE_SOCKADDR_LEN) +AC_MSG_RESULT([$have_sockaddr_len]) + + HAVE_POLL=no AC_ARG_ENABLE(poll,AC_HELP_STRING([--enable-poll],[Use poll() on sockets (default: yes)]),want_poll=$enableval,want_poll=yes) if [[ "x$want_poll" = "xyes" ]]; then diff --git a/engine/Makefile.in b/engine/Makefile.in index 0011cdbb..8d0cc143 100644 --- a/engine/Makefile.in +++ b/engine/Makefile.in @@ -101,7 +101,7 @@ DataFormat.o: @srcdir@/DataFormat.cpp $(MKDEPS) $(PINC) $(COMPILE) -c $< Socket.o: @srcdir@/Socket.cpp $(MKDEPS) $(CINC) - $(COMPILE) @FDSIZE_HACK@ @NETDB_FLAGS@ -c $< + $(COMPILE) @FDSIZE_HACK@ @NETDB_FLAGS@ @HAVE_SOCKADDR_LEN@ -c $< Resolver.o: @srcdir@/Resolver.cpp $(MKDEPS) $(CINC) $(COMPILE) @RESOLV_INC@ -c $< diff --git a/engine/Socket.cpp b/engine/Socket.cpp index efd08e42..35bc2354 100644 --- a/engine/Socket.cpp +++ b/engine/Socket.cpp @@ -158,6 +158,9 @@ bool SocketAddr::assign(int family) m_address = (struct sockaddr*) ::calloc(m_length,1); if (m_address) { m_address->sa_family = family; +#ifdef HAVE_SOCKADDR_LEN + m_address->sa_len = m_length; +#endif return true; } return false;