*** /live/groupsock/GroupsockHelper.cpp 2018-08-29 12:43:37.000000000 -0500
--- /live/groupsock/GroupsockHelper.cpp 2018-08-29 13:12:24.000000000 -0500
***************
*** 26,37 ****
--- 26,41 ----
  #else
  #include <stdarg.h>
  #include <time.h>
  #include <sys/time.h>
  #if !defined(_WIN32)
  #include <netinet/tcp.h>
+ #ifdef __ANDROID_NDK__
+ #include <android/ndk-version.h>
+ #define ANDROID_OLD_NDK __NDK_MAJOR__ < 17
+ #endif
  #endif
  #include <fcntl.h>
  #define initializeWinsockIfNecessary() 1
  #endif
  #if defined(__WIN32__) || defined(_WIN32) || defined(_QNX4)
  #else
***************
*** 560,572 ****
  Boolean socketJoinGroupSSM(UsageEnvironment& env, int socket,
  			   netAddressBits groupAddress,
  			   netAddressBits sourceFilterAddr) {
    if (!IsMulticastAddress(groupAddress)) return True; // ignore this case
  
    struct ip_mreq_source imr;
! #ifdef __ANDROID__
      imr.imr_multiaddr = groupAddress;
      imr.imr_sourceaddr = sourceFilterAddr;
      imr.imr_interface = ReceivingInterfaceAddr;
  #else
      imr.imr_multiaddr.s_addr = groupAddress;
      imr.imr_sourceaddr.s_addr = sourceFilterAddr;
--- 564,576 ----
  Boolean socketJoinGroupSSM(UsageEnvironment& env, int socket,
  			   netAddressBits groupAddress,
  			   netAddressBits sourceFilterAddr) {
    if (!IsMulticastAddress(groupAddress)) return True; // ignore this case
  
    struct ip_mreq_source imr;
! #if ANDROID_OLD_NDK
      imr.imr_multiaddr = groupAddress;
      imr.imr_sourceaddr = sourceFilterAddr;
      imr.imr_interface = ReceivingInterfaceAddr;
  #else
      imr.imr_multiaddr.s_addr = groupAddress;
      imr.imr_sourceaddr.s_addr = sourceFilterAddr;
***************
*** 586,598 ****
  Boolean socketLeaveGroupSSM(UsageEnvironment& /*env*/, int socket,
  			    netAddressBits groupAddress,
  			    netAddressBits sourceFilterAddr) {
    if (!IsMulticastAddress(groupAddress)) return True; // ignore this case
  
    struct ip_mreq_source imr;
! #ifdef __ANDROID__
      imr.imr_multiaddr = groupAddress;
      imr.imr_sourceaddr = sourceFilterAddr;
      imr.imr_interface = ReceivingInterfaceAddr;
  #else
      imr.imr_multiaddr.s_addr = groupAddress;
      imr.imr_sourceaddr.s_addr = sourceFilterAddr;
--- 590,602 ----
  Boolean socketLeaveGroupSSM(UsageEnvironment& /*env*/, int socket,
  			    netAddressBits groupAddress,
  			    netAddressBits sourceFilterAddr) {
    if (!IsMulticastAddress(groupAddress)) return True; // ignore this case
  
    struct ip_mreq_source imr;
! #if ANDROID_OLD_NDK
      imr.imr_multiaddr = groupAddress;
      imr.imr_sourceaddr = sourceFilterAddr;
      imr.imr_interface = ReceivingInterfaceAddr;
  #else
      imr.imr_multiaddr.s_addr = groupAddress;
      imr.imr_sourceaddr.s_addr = sourceFilterAddr;
***************
*** 882,887 ****
--- 886,892 ----
    tp->tv_sec =  (long)(tickNow.QuadPart / tickFrequency.QuadPart);
    tp->tv_usec = (long)(((tickNow.QuadPart % tickFrequency.QuadPart) * 1000000L) / tickFrequency.QuadPart);
  
    return 0;
  }
  #endif
+ #undef ANDROID_OLD_NDK
