1e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/***************************************************************************
2e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *                                  _   _ ____  _
3e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *  Project                     ___| | | |  _ \| |
4e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *                             / __| | | | |_) | |
5e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *                            | (__| |_| |  _ <| |___
6e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *                             \___|\___/|_| \_\_____|
7e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *
8e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
9e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *
10e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * This software is licensed as described in the file COPYING, which
11e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * you should have received as part of this distribution. The terms
12e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * are also available at http://curl.haxx.se/docs/copyright.html.
13e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *
14e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * You may opt to use, copy, modify, merge, publish, distribute and/or sell
15e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * copies of the Software, and permit persons to whom the Software is
16e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * furnished to do so, under the terms of the COPYING file.
17e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *
18e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * KIND, either express or implied.
20e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *
21e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET ***************************************************************************/
229bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef TIME_WITH_SYS_TIME
239bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels/* Time with sys/time test */
249bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
259bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <sys/types.h>
269bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <sys/time.h>
279bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <time.h>
289bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
299bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint
309bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsmain ()
319bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels{
329bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsif ((struct tm *) 0)
339bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsreturn 0;
349bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  ;
359bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  return 0;
369bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels}
379bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
389bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
399bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
409bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_FCNTL_O_NONBLOCK
419bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
429bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels/* headers for FCNTL_O_NONBLOCK test */
439bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <sys/types.h>
449bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <unistd.h>
459bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <fcntl.h>
469bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels/* */
479bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#if defined(sun) || defined(__sun__) || \
489bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    defined(__SUNPRO_C) || defined(__SUNPRO_CC)
499bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels# if defined(__SVR4) || defined(__srv4__)
509bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  define PLATFORM_SOLARIS
519bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels# else
529bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  define PLATFORM_SUNOS4
539bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels# endif
549bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
559bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX41)
569bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels# define PLATFORM_AIX_V3
579bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
589bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels/* */
599bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__)
609bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#error "O_NONBLOCK does not work on this platform"
619bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
629bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
639bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint
649bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsmain ()
659bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels{
669bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels      /* O_NONBLOCK source test */
679bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels      int flags = 0;
689bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels      if(0 != fcntl(0, F_SETFL, flags | O_NONBLOCK))
699bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels          return 1;
709bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels      return 0;
719bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels}
729bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
739bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
74e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* tests for gethostbyaddr_r or gethostbyname_r */
75e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#if defined(HAVE_GETHOSTBYADDR_R_5_REENTRANT) || \
76e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET    defined(HAVE_GETHOSTBYADDR_R_7_REENTRANT) || \
77e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET    defined(HAVE_GETHOSTBYADDR_R_8_REENTRANT) || \
78e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET    defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT) || \
79e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET    defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT) || \
80e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET    defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
81e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#   define _REENTRANT
82e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET    /* no idea whether _REENTRANT is always set, just invent a new flag */
83e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#   define TEST_GETHOSTBYFOO_REENTRANT
84e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#endif
85e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#if defined(HAVE_GETHOSTBYADDR_R_5) || \
86e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET    defined(HAVE_GETHOSTBYADDR_R_7) || \
87e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET    defined(HAVE_GETHOSTBYADDR_R_8) || \
88e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET    defined(HAVE_GETHOSTBYNAME_R_3) || \
89e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET    defined(HAVE_GETHOSTBYNAME_R_5) || \
90e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET    defined(HAVE_GETHOSTBYNAME_R_6) || \
91e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET    defined(TEST_GETHOSTBYFOO_REENTRANT)
929bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <sys/types.h>
939bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <netdb.h>
94e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETint main(void)
95e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET{
96e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  char *address = "example.com";
97e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  int length = 0;
98e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  int type = 0;
99e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  struct hostent h;
100e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  int rc = 0;
101e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#if defined(HAVE_GETHOSTBYADDR_R_5) || \
102e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET    defined(HAVE_GETHOSTBYADDR_R_5_REENTRANT) || \
103e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET    \
104e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET    defined(HAVE_GETHOSTBYNAME_R_3) || \
105e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET    defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT)
106e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  struct hostent_data hdata;
107e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#elif defined(HAVE_GETHOSTBYADDR_R_7) || \
108e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET      defined(HAVE_GETHOSTBYADDR_R_7_REENTRANT) || \
109e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET      defined(HAVE_GETHOSTBYADDR_R_8) || \
110e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET      defined(HAVE_GETHOSTBYADDR_R_8_REENTRANT) || \
111e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET      \
112e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET      defined(HAVE_GETHOSTBYNAME_R_5) || \
113e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET      defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT) || \
114e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET      defined(HAVE_GETHOSTBYNAME_R_6) || \
115e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET      defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
116e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  char buffer[8192];
117e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  int h_errnop;
118e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  struct hostent *hp;
1199bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
1209bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
1219bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifndef gethostbyaddr_r
1229bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  (void)gethostbyaddr_r;
1239bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
1249bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
125e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#if   defined(HAVE_GETHOSTBYADDR_R_5) || \
126e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET      defined(HAVE_GETHOSTBYADDR_R_5_REENTRANT)
127e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  rc = gethostbyaddr_r(address, length, type, &h, &hdata);
128e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#elif defined(HAVE_GETHOSTBYADDR_R_7) || \
129e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET      defined(HAVE_GETHOSTBYADDR_R_7_REENTRANT)
130e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  hp = gethostbyaddr_r(address, length, type, &h, buffer, 8192, &h_errnop);
131e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  (void)hp;
132e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#elif defined(HAVE_GETHOSTBYADDR_R_8) || \
133e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET      defined(HAVE_GETHOSTBYADDR_R_8_REENTRANT)
134e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  rc = gethostbyaddr_r(address, length, type, &h, buffer, 8192, &hp, &h_errnop);
1359bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
1369bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
137e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#if   defined(HAVE_GETHOSTBYNAME_R_3) || \
138e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET      defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT)
139e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  rc = gethostbyname_r(address, &h, &hdata);
140e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#elif defined(HAVE_GETHOSTBYNAME_R_5) || \
141e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET      defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT)
142e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  rc = gethostbyname_r(address, &h, buffer, 8192, 0, &h_errnop);
143e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  (void)hp; /* not used for test */
144e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#elif defined(HAVE_GETHOSTBYNAME_R_6) || \
145e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET      defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
146e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  rc = gethostbyname_r(address, &h, buffer, 8192, &hp, &h_errnop);
1479bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
1489bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
149e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  (void)length;
150e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  (void)type;
151e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  (void)rc;
1529bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  return 0;
1539bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels}
1549bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
1559bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
1569bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_SOCKLEN_T
1579bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef _WIN32
1589bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <ws2tcpip.h>
1599bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#else
1609bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <sys/types.h>
1619bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <sys/socket.h>
1629bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
1639bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint
1649bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsmain ()
1659bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels{
1669bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsif ((socklen_t *) 0)
1679bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  return 0;
1689bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsif (sizeof (socklen_t))
1699bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  return 0;
1709bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  ;
1719bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  return 0;
1729bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels}
1739bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
1749bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_IN_ADDR_T
1759bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <sys/types.h>
1769bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <sys/socket.h>
1779bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <arpa/inet.h>
1789bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
1799bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint
1809bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsmain ()
1819bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels{
1829bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsif ((in_addr_t *) 0)
1839bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  return 0;
1849bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsif (sizeof (in_addr_t))
1859bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  return 0;
1869bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  ;
1879bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  return 0;
1889bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels}
1899bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
1909bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
1919bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_BOOL_T
1929bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_SYS_TYPES_H
1939bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <sys/types.h>
1949bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
1959bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_STDBOOL_H
1969bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <stdbool.h>
1979bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
1989bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint
1999bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsmain ()
2009bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels{
2019bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsif (sizeof (bool *) )
2029bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  return 0;
2039bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  ;
2049bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  return 0;
2059bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels}
2069bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
2079bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
2089bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef STDC_HEADERS
2099bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <stdlib.h>
2109bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <stdarg.h>
2119bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <string.h>
2129bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <float.h>
2139bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint main() { return 0; }
2149bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
2159bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef RETSIGTYPE_TEST
2169bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <sys/types.h>
2179bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <signal.h>
2189bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef signal
2199bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels# undef signal
2209bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
2219bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef __cplusplus
2229bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsextern "C" void (*signal (int, void (*)(int)))(int);
2239bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#else
2249bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsvoid (*signal ()) ();
2259bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
2269bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
2279bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint
2289bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsmain ()
2299bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels{
2309bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  return 0;
2319bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels}
2329bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
2339bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_INET_NTOA_R_DECL
2349bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <arpa/inet.h>
2359bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
2369bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelstypedef void (*func_type)();
2379bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
2389bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint main()
2399bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels{
2409bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifndef inet_ntoa_r
2419bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  func_type func;
2429bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  func = (func_type)inet_ntoa_r;
2439bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
2449bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  return 0;
2459bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels}
2469bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
2479bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_INET_NTOA_R_DECL_REENTRANT
2489bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#define _REENTRANT
2499bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <arpa/inet.h>
2509bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
2519bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelstypedef void (*func_type)();
2529bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
2539bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint main()
2549bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels{
2559bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifndef inet_ntoa_r
2569bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  func_type func;
2579bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  func = (func_type)&inet_ntoa_r;
2589bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
2599bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  return 0;
2609bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels}
2619bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
2629bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_GETADDRINFO
2639bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <netdb.h>
2649bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <sys/types.h>
2659bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <sys/socket.h>
2669bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
2679bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint main(void) {
2689bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    struct addrinfo hints, *ai;
2699bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    int error;
2709bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
2719bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    memset(&hints, 0, sizeof(hints));
2729bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    hints.ai_family = AF_UNSPEC;
2739bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    hints.ai_socktype = SOCK_STREAM;
2749bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifndef getaddrinfo
2759bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    (void)getaddrinfo;
2769bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
2779bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    error = getaddrinfo("127.0.0.1", "8080", &hints, &ai);
2789bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    if (error) {
2799bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels        return 1;
2809bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    }
2819bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    return 0;
2829bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels}
2839bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
2849bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_FILE_OFFSET_BITS
2859bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef _FILE_OFFSET_BITS
2869bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#undef _FILE_OFFSET_BITS
2879bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
2889bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#define _FILE_OFFSET_BITS 64
2899bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <sys/types.h>
2909bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels /* Check that off_t can represent 2**63 - 1 correctly.
2919bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    We can't simply define LARGE_OFF_T to be 9223372036854775807,
2929bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    since some C++ compilers masquerading as C compilers
2939bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    incorrectly reject 9223372036854775807.  */
2949bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
2959bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
2969bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels                       && LARGE_OFF_T % 2147483647 == 1)
2979bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels                      ? 1 : -1];
2989bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint main () { ; return 0; }
2999bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
3009bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_IOCTLSOCKET
3019bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels/* includes start */
3029bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_WINDOWS_H
3039bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  ifndef WIN32_LEAN_AND_MEAN
3049bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#    define WIN32_LEAN_AND_MEAN
3059bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  endif
3069bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  include <windows.h>
3079bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  ifdef HAVE_WINSOCK2_H
3089bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#    include <winsock2.h>
3099bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  else
3109bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#    ifdef HAVE_WINSOCK_H
3119bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#      include <winsock.h>
3129bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#    endif
3139bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  endif
3149bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
3159bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
3169bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint
3179bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsmain ()
3189bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels{
3199bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
3209bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels/* ioctlsocket source code */
3219bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels int socket;
3229bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels unsigned long flags = ioctlsocket(socket, FIONBIO, &flags);
3239bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
3249bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  ;
3259bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  return 0;
3269bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels}
3279bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
3289bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
3299bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_IOCTLSOCKET_CAMEL
3309bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels/* includes start */
3319bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_WINDOWS_H
3329bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  ifndef WIN32_LEAN_AND_MEAN
3339bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#    define WIN32_LEAN_AND_MEAN
3349bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  endif
3359bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  include <windows.h>
3369bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  ifdef HAVE_WINSOCK2_H
3379bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#    include <winsock2.h>
3389bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  else
3399bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#    ifdef HAVE_WINSOCK_H
3409bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#      include <winsock.h>
3419bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#    endif
3429bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  endif
3439bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
3449bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
3459bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint
3469bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsmain ()
3479bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels{
3489bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
3499bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels/* IoctlSocket source code */
3509bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    if(0 != IoctlSocket(0, 0, 0))
3519bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels      return 1;
3529bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  ;
3539bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  return 0;
3549bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels}
3559bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
3569bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_IOCTLSOCKET_CAMEL_FIONBIO
3579bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels/* includes start */
3589bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_WINDOWS_H
3599bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  ifndef WIN32_LEAN_AND_MEAN
3609bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#    define WIN32_LEAN_AND_MEAN
3619bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  endif
3629bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  include <windows.h>
3639bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  ifdef HAVE_WINSOCK2_H
3649bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#    include <winsock2.h>
3659bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  else
3669bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#    ifdef HAVE_WINSOCK_H
3679bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#      include <winsock.h>
3689bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#    endif
3699bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  endif
3709bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
3719bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
3729bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint
3739bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsmain ()
3749bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels{
3759bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
3769bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels/* IoctlSocket source code */
3779bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels        long flags = 0;
3789bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels        if(0 != ioctlsocket(0, FIONBIO, &flags))
3799bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels          return 1;
3809bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  ;
3819bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  return 0;
3829bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels}
3839bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
3849bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_IOCTLSOCKET_FIONBIO
3859bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels/* includes start */
3869bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_WINDOWS_H
3879bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  ifndef WIN32_LEAN_AND_MEAN
3889bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#    define WIN32_LEAN_AND_MEAN
3899bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  endif
3909bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  include <windows.h>
3919bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  ifdef HAVE_WINSOCK2_H
3929bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#    include <winsock2.h>
3939bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  else
3949bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#    ifdef HAVE_WINSOCK_H
3959bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#      include <winsock.h>
3969bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#    endif
3979bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  endif
3989bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
3999bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
4009bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint
4019bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsmain ()
4029bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels{
4039bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
4049bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels        int flags = 0;
4059bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels        if(0 != ioctlsocket(0, FIONBIO, &flags))
4069bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels          return 1;
4079bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
4089bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  ;
4099bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  return 0;
4109bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels}
4119bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
4129bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_IOCTL_FIONBIO
4139bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels/* headers for FIONBIO test */
4149bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels/* includes start */
4159bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_SYS_TYPES_H
4169bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  include <sys/types.h>
4179bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
4189bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_UNISTD_H
4199bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  include <unistd.h>
4209bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
4219bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_SYS_SOCKET_H
4229bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  include <sys/socket.h>
4239bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
4249bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_SYS_IOCTL_H
4259bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  include <sys/ioctl.h>
4269bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
4279bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_STROPTS_H
4289bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  include <stropts.h>
4299bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
4309bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
4319bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint
4329bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsmain ()
4339bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels{
4349bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
4359bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels        int flags = 0;
4369bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels        if(0 != ioctl(0, FIONBIO, &flags))
4379bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels          return 1;
4389bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
4399bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  ;
4409bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  return 0;
4419bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels}
4429bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
4439bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_IOCTL_SIOCGIFADDR
4449bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels/* headers for FIONBIO test */
4459bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels/* includes start */
4469bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_SYS_TYPES_H
4479bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  include <sys/types.h>
4489bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
4499bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_UNISTD_H
4509bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  include <unistd.h>
4519bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
4529bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_SYS_SOCKET_H
4539bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  include <sys/socket.h>
4549bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
4559bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_SYS_IOCTL_H
4569bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  include <sys/ioctl.h>
4579bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
4589bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_STROPTS_H
4599bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  include <stropts.h>
4609bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
4619bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <net/if.h>
4629bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
4639bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint
4649bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsmain ()
4659bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels{
4669bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels        struct ifreq ifr;
4679bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels        if(0 != ioctl(0, SIOCGIFADDR, &ifr))
4689bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels          return 1;
4699bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
4709bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  ;
4719bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  return 0;
4729bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels}
4739bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
4749bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_SETSOCKOPT_SO_NONBLOCK
4759bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels/* includes start */
4769bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_WINDOWS_H
4779bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  ifndef WIN32_LEAN_AND_MEAN
4789bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#    define WIN32_LEAN_AND_MEAN
4799bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  endif
4809bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  include <windows.h>
4819bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  ifdef HAVE_WINSOCK2_H
4829bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#    include <winsock2.h>
4839bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  else
4849bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#    ifdef HAVE_WINSOCK_H
4859bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#      include <winsock.h>
4869bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#    endif
4879bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  endif
4889bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
4899bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels/* includes start */
4909bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_SYS_TYPES_H
4919bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  include <sys/types.h>
4929bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
4939bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_SYS_SOCKET_H
4949bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#  include <sys/socket.h>
4959bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
4969bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels/* includes end */
4979bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels
4989bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint
4999bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsmain ()
5009bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels{
5019bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels        if(0 != setsockopt(0, SOL_SOCKET, SO_NONBLOCK, 0, 0))
5029bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels          return 1;
5039bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  ;
5049bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  return 0;
5059bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels}
5069bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
5079bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_GLIBC_STRERROR_R
5089bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <string.h>
5099bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <errno.h>
5109bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint
5119bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsmain () {
5129bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  char buffer[1024]; /* big enough to play with */
5139bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  char *string =
5149bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    strerror_r(EACCES, buffer, sizeof(buffer));
5159bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    /* this should've returned a string */
5169bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    if(!string || !string[0])
5179bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels      return 99;
5189bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    return 0;
5199bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels}
5209bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
5219bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_POSIX_STRERROR_R
5229bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <string.h>
5239bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <errno.h>
5249bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint
5259bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsmain () {
5269bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  char buffer[1024]; /* big enough to play with */
5279bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels  int error =
5289bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    strerror_r(EACCES, buffer, sizeof(buffer));
5299bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    /* This should've returned zero, and written an error string in the
5309bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels       buffer.*/
5319bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    if(!buffer[0] || error)
5329bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels      return 99;
5339bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels    return 0;
5349bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels}
5359bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif
536