Detect the presence of the sa_len field of struct sockaddr and set it if that is the case. Fixes the comparison of SocketAddr objects on Mac OS X and BSD-based systems.

git-svn-id: http://voip.null.ro/svn/yate@5218 acf43c95-373e-0410-b603-e72c3f656dc1
This commit is contained in:
oana 2012-08-07 12:08:16 +00:00
parent c58f683dd1
commit 9e5c0b49b6
3 changed files with 22 additions and 1 deletions

View File

@ -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 <sys/socket.h>
],[
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

View File

@ -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 $<

View File

@ -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;