⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 apr_network.m4

📁 linux subdivision ying gai ke yi le ba
💻 M4
📖 第 1 页 / 共 2 页
字号:
dnl -----------------------------------------------------------------dnl apr_network.m4: APR's autoconf macros for testing network supportdnldnldnl check for working getaddrinfo()dnldnl Note that if the system doesn't have gai_strerror(), wednl can't use getaddrinfo() because we can't get stringsdnl describing the error codes.dnlAC_DEFUN(APR_CHECK_WORKING_GETADDRINFO,[  AC_CACHE_CHECK(for working getaddrinfo, ac_cv_working_getaddrinfo,[  AC_TRY_RUN( [#ifdef HAVE_NETDB_H#include <netdb.h>#endif#ifdef HAVE_STRING_H#include <string.h>#endif#ifdef HAVE_SYS_TYPES_H#include <sys/types.h>#endif#ifdef HAVE_SYS_SOCKET_H#include <sys/socket.h>#endifvoid main(void) {    struct addrinfo hints, *ai;    int error;    memset(&hints, 0, sizeof(hints));    hints.ai_family = AF_UNSPEC;    hints.ai_socktype = SOCK_STREAM;    error = getaddrinfo("127.0.0.1", NULL, &hints, &ai);    if (error) {        exit(1);    }    if (ai->ai_addr->sa_family != AF_INET) {        exit(1);    }    exit(0);}],[  ac_cv_working_getaddrinfo="yes"],[  ac_cv_working_getaddrinfo="no"],[  ac_cv_working_getaddrinfo="yes"])])if test "$ac_cv_working_getaddrinfo" = "yes"; then  if test "$ac_cv_func_gai_strerror" != "yes"; then    ac_cv_working_getaddrinfo="no"  else    AC_DEFINE(HAVE_GETADDRINFO, 1, [Define if getaddrinfo exists and works well enough for APR])  fifi])dnldnl check for working getnameinfo()dnlAC_DEFUN(APR_CHECK_WORKING_GETNAMEINFO,[  AC_CACHE_CHECK(for working getnameinfo, ac_cv_working_getnameinfo,[  AC_TRY_RUN( [#ifdef HAVE_NETDB_H#include <netdb.h>#endif#ifdef HAVE_STRING_H#include <string.h>#endif#ifdef HAVE_SYS_TYPES_H#include <sys/types.h>#endif#ifdef HAVE_SYS_SOCKET_H#include <sys/socket.h>#endif#ifdef HAVE_NETINET_IN_H#include <netinet/in.h>#endifvoid main(void) {    struct sockaddr_in sa;    char hbuf[256];    int error;    sa.sin_family = AF_INET;    sa.sin_port = 0;    sa.sin_addr.s_addr = inet_addr("127.0.0.1");#ifdef SIN6_LEN    sa.sin_len = sizeof(sa);#endif    error = getnameinfo((const struct sockaddr *)&sa, sizeof(sa),                        hbuf, 256, NULL, 0,                        NI_NUMERICHOST);    if (error) {        exit(1);    } else {        exit(0);    }}],[  ac_cv_working_getnameinfo="yes"],[  ac_cv_working_getnameinfo="no"],[  ac_cv_working_getnameinfo="yes"])])if test "$ac_cv_working_getnameinfo" = "yes"; then  AC_DEFINE(HAVE_GETNAMEINFO, 1, [Define if getnameinfo exists])fi])dnldnl check for negative error codes for getaddrinfo()dnlAC_DEFUN(APR_CHECK_NEGATIVE_EAI,[  AC_CACHE_CHECK(for negative error codes for getaddrinfo, ac_cv_negative_eai,[  AC_TRY_RUN( [#ifdef HAVE_NETDB_H#include <netdb.h>#endifvoid main(void) {    if (EAI_ADDRFAMILY < 0) {        exit(0);    }    exit(1);}],[  ac_cv_negative_eai="yes"],[  ac_cv_negative_eai="no"],[  ac_cv_negative_eai="no"])])if test "$ac_cv_negative_eai" = "yes"; then  AC_DEFINE(NEGATIVE_EAI, 1, [Define if EAI_ error codes from getaddrinfo are negative])fi])dnldnl check for presence of  retrans/retry variables in the res_state structurednlAC_DEFUN(APR_CHECK_RESOLV_RETRANS,[  AC_CACHE_CHECK(for presence of retrans/retry fields in res_state/resolv.h , ac_cv_retransretry,[  AC_TRY_RUN( [#include <sys/types.h>#if defined(__sun__)#include <inet/ip.h>#endif#include <resolv.h>/* _res is a global defined in resolv.h */int main(void) {    _res.retrans = 2;    _res.retry = 1;    exit(0);    return 0;}],[  ac_cv_retransretry="yes"],[  ac_cv_retransretry="no"],[  ac_cv_retransretry="no"])])if test "$ac_cv_retransretry" = "yes"; then  AC_DEFINE(RESOLV_RETRANSRETRY, 1, [Define if resolv.h's res_state has the fields retrans/rety])fi])dnldnl Checks the definition of gethostbyname_r and gethostbyaddr_rdnl which are different for glibc, solaris and assorted other operatingdnl systemsdnldnl Note that this test is executed too early to see if we have all ofdnl the headers.AC_DEFUN(APR_CHECK_GETHOSTBYNAME_R_STYLE,[dnl Try and compile a glibc2 gethostbyname_r piece of code, and set thednl style of the routines to glibc2 on successAC_CACHE_CHECK([style of gethostbyname_r routine], ac_cv_gethostbyname_r_style,APR_TRY_COMPILE_NO_WARNING([#ifdef HAVE_SYS_TYPES_H#include <sys/types.h>#endif#ifdef HAVE_NETINET_IN_H#include <netinet/in.h>#endif#ifdef HAVE_ARPA_INET_H#include <arpa/inet.h>#endif#ifdef HAVE_NETDB_H#include <netdb.h>#endif#ifdef HAVE_STDLIB_H#include <stdlib.h>#endif],[int tmp = gethostbyname_r((const char *) 0, (struct hostent *) 0,                           (char *) 0, 0, (struct hostent **) 0, &tmp);], ac_cv_gethostbyname_r_style=glibc2, ac_cv_gethostbyname_r_style=none))if test "$ac_cv_gethostbyname_r_style" = "glibc2"; then    AC_DEFINE(GETHOSTBYNAME_R_GLIBC2, 1, [Define if gethostbyname_r has the glibc style])fiAC_CACHE_CHECK([3rd argument to the gethostbyname_r routines], ac_cv_gethostbyname_r_arg,APR_TRY_COMPILE_NO_WARNING([#ifdef HAVE_SYS_TYPES_H#include <sys/types.h>#endif#ifdef HAVE_NETINET_IN_H#include <netinet/in.h>#endif#ifdef HAVE_ARPA_INET_H#include <arpa/inet.h>#endif#ifdef HAVE_NETDB_H#include <netdb.h>#endif#ifdef HAVE_STDLIB_H#include <stdlib.h>#endif],[int tmp = gethostbyname_r((const char *) 0, (struct hostent *) 0,                           (struct hostent_data *) 0);],ac_cv_gethostbyname_r_arg=hostent_data, ac_cv_gethostbyname_r_arg=char))if test "$ac_cv_gethostbyname_r_arg" = "hostent_data"; then    AC_DEFINE(GETHOSTBYNAME_R_HOSTENT_DATA, 1, [Define if gethostbyname_r has the hostent_data for the third argument])fi])dnldnl see if TCP_NODELAY setting is inherited from listening socketsdnlAC_DEFUN(APR_CHECK_TCP_NODELAY_INHERITED,[  AC_CACHE_CHECK(if TCP_NODELAY setting is inherited from listening sockets, ac_cv_tcp_nodelay_inherited,[  AC_TRY_RUN( [#include <stdio.h>#ifdef HAVE_SYS_TYPES_H#include <sys/types.h>#endif#ifdef HAVE_SYS_SOCKET_H#include <sys/socket.h>#endif#ifdef HAVE_NETINET_IN_H#include <netinet/in.h>#endif#ifdef HAVE_NETINET_TCP_H#include <netinet/tcp.h>#endif#ifndef HAVE_SOCKLEN_Ttypedef int socklen_t;#endifint main(void) {    int listen_s, connected_s, client_s;    int listen_port, rc;    struct sockaddr_in sa;    socklen_t sa_len;    socklen_t option_len;    int option;    listen_s = socket(AF_INET, SOCK_STREAM, 0);    if (listen_s < 0) {        perror("socket");        exit(1);    }    option = 1;    rc = setsockopt(listen_s, IPPROTO_TCP, TCP_NODELAY, &option, sizeof option);    if (rc < 0) {        perror("setsockopt TCP_NODELAY");        exit(1);    }    memset(&sa, 0, sizeof sa);    sa.sin_family = AF_INET;#ifdef BEOS    sa.sin_addr.s_addr = htonl(INADDR_LOOPBACK);#endif    /* leave port 0 to get ephemeral */    rc = bind(listen_s, (struct sockaddr *)&sa, sizeof sa);    if (rc < 0) {        perror("bind for ephemeral port");        exit(1);    }    /* find ephemeral port */    sa_len = sizeof(sa);    rc = getsockname(listen_s, (struct sockaddr *)&sa, &sa_len);    if (rc < 0) {        perror("getsockname");        exit(1);    }    listen_port = sa.sin_port;    rc = listen(listen_s, 5);    if (rc < 0) {        perror("listen");        exit(1);    }    client_s = socket(AF_INET, SOCK_STREAM, 0);    if (client_s < 0) {        perror("socket");        exit(1);    }    memset(&sa, 0, sizeof sa);    sa.sin_family = AF_INET;    sa.sin_port   = listen_port;#ifdef BEOS    sa.sin_addr.s_addr = htonl(INADDR_LOOPBACK);#endif    /* leave sin_addr all zeros to use loopback */    rc = connect(client_s, (struct sockaddr *)&sa, sizeof sa);    if (rc < 0) {        perror("connect");        exit(1);    }    sa_len = sizeof sa;    connected_s = accept(listen_s, (struct sockaddr *)&sa, &sa_len);    if (connected_s < 0) {        perror("accept");        exit(1);    }    option_len = sizeof option;    rc = getsockopt(connected_s, IPPROTO_TCP, TCP_NODELAY, &option, &option_len);    if (rc < 0) {        perror("getsockopt");        exit(1);    }    if (!option) {        fprintf(stderr, "TCP_NODELAY is not set in the child.\n");        exit(1);    }    return 0;}],[    ac_cv_tcp_nodelay_inherited="yes"],[    ac_cv_tcp_nodelay_inherited="no"],[    ac_cv_tcp_nodelay_inherited="yes"])])if test "$ac_cv_tcp_nodelay_inherited" = "yes"; then    tcp_nodelay_inherited=1else    tcp_nodelay_inherited=0fi])dnldnl see if O_NONBLOCK setting is inherited from listening socketsdnlAC_DEFUN(APR_CHECK_O_NONBLOCK_INHERITED,[  AC_CACHE_CHECK(if O_NONBLOCK setting is inherited from listening sockets, ac_cv_o_nonblock_inherited,[  AC_TRY_RUN( [#include <stdio.h>#ifdef HAVE_SYS_TYPES_H#include <sys/types.h>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -