Index: configure.ac ================================================================== --- configure.ac +++ configure.ac @@ -1404,10 +1404,11 @@ AC_CHECK_HEADER(netinet/tcp.h, [ AC_DEFINE(OF_HAVE_NETINET_TCP_H, 1, [Whether we have netinet/tcp.h]) ]) AC_CHECK_HEADERS([arpa/inet.h netdb.h net/if.h]) + AC_CHECK_FUNCS([if_indextoname if_nametoindex]) AC_CHECK_HEADER(sys/un.h, [ AC_DEFINE(OF_HAVE_SYS_UN_H, 1, [Whether we have sys/un.h]) ]) AC_CHECK_MEMBER([struct sockaddr_in6.sin6_addr], [ AC_EGREP_CPP(egrep_cpp_yes, [ Index: src/OFSocket.m ================================================================== --- src/OFSocket.m +++ src/OFSocket.m @@ -468,18 +468,20 @@ addrIn6->sin6_family = AF_UNSPEC; #endif addrIn6->sin6_port = OFToBigEndian16(port); if ((percent = [IPv6 rangeOfString: @"%"].location) != OFNotFound) { +#if defined(HAVE_IF_NAMETOINDEX) || defined(OF_WINDOWS) OFString *interface = [IPv6 substringFromIndex: percent + 1]; +#endif IPv6 = [IPv6 substringToIndex: percent]; -#ifdef OF_WINDOWS +#if defined(OF_WINDOWS) if (if_nametoindexPtr != NULL) addrIn6->sin6_scope_id = if_nametoindexPtr([interface cStringWithEncoding: [OFLocale encoding]]); -#else +#elif defined(HAVE_IF_NAMETOINDEX) addrIn6->sin6_scope_id = if_nametoindex( [interface cStringWithEncoding: [OFLocale encoding]]); #endif } @@ -904,25 +906,27 @@ addrIn6->sin6_addr.s6_addr[i + 1]]; first = false; } } +#if defined(HAVE_IF_INDEXTONAME) || defined(OF_WINDOWS) if (addrIn6->sin6_scope_id != 0) { -#ifdef OF_WINDOWS +# ifdef OF_WINDOWS char interface[IF_MAX_STRING_SIZE]; if (if_indextonamePtr != NULL && if_indextonamePtr( addrIn6->sin6_scope_id, interface) != NULL) -#else +# else char interface[IF_NAMESIZE]; if (if_indextoname(addrIn6->sin6_scope_id, interface) != NULL) -#endif +# endif [string appendFormat: @"%%%s", interface]; else [string appendFormat: @"%%%u", addrIn6->sin6_scope_id]; } +#endif [string makeImmutable]; return string; }