my_net.h
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. /*
  14.   thread safe version of some common functions:
  15.   my_inet_ntoa
  16.   This file is also used to make handling of sockets and ioctl()
  17.   portable accross systems.
  18. */
  19. #ifndef _my_net_h
  20. #define _my_net_h
  21. C_MODE_START
  22. #include <errno.h>
  23. #ifdef HAVE_SYS_SOCKET_H
  24. #include <sys/socket.h>
  25. #endif
  26. #ifdef HAVE_NETINET_IN_H
  27. #include <netinet/in.h>
  28. #endif
  29. #ifdef HAVE_ARPA_INET_H
  30. #include <arpa/inet.h>
  31. #endif
  32. #ifdef HAVE_POLL
  33. #include <sys/poll.h>
  34. #endif
  35. #ifdef HAVE_SYS_IOCTL_H
  36. #include <sys/ioctl.h>
  37. #endif
  38. #if !defined(MSDOS) && !defined(__WIN__) && !defined(HAVE_BROKEN_NETINET_INCLUDES) && !defined(__BEOS__) && !defined(__NETWARE__)
  39. #include <netinet/in_systm.h>
  40. #include <netinet/in.h>
  41. #include <netinet/ip.h>
  42. #if !defined(alpha_linux_port)
  43. #include <netinet/tcp.h>
  44. #endif
  45. #endif
  46. #if defined(__EMX__)
  47. #include <sys/ioctl.h>
  48. #define ioctlsocket(A,B,C) ioctl((A),(B),(void *)(C),sizeof(*(C)))
  49. #undef HAVE_FCNTL
  50. #endif /* defined(__EMX__) */
  51. #if defined(MSDOS) || defined(__WIN__)
  52. #define O_NONBLOCK 1    /* For emulation of fcntl() */
  53. #endif
  54. /*
  55.   On OSes which don't have the in_addr_t, we guess that using uint32 is the best
  56.   possible choice. We guess this from the fact that on HP-UX64bit & FreeBSD64bit
  57.   & Solaris64bit, in_addr_t is equivalent to uint32. And on Linux32bit too.
  58. */
  59. #ifndef HAVE_IN_ADDR_T
  60. #define in_addr_t uint32
  61. #endif
  62. /* Thread safe or portable version of some functions */
  63. void my_inet_ntoa(struct in_addr in, char *buf);
  64. /*
  65.   Handling of gethostbyname_r()
  66. */
  67. #if !defined(HPUX10)
  68. struct hostent;
  69. #endif /* HPUX */
  70. #if !defined(HAVE_GETHOSTBYNAME_R)
  71. struct hostent *my_gethostbyname_r(const char *name,
  72.    struct hostent *result, char *buffer,
  73.    int buflen, int *h_errnop);
  74. void my_gethostbyname_r_free();
  75. #elif defined(HAVE_PTHREAD_ATTR_CREATE) || defined(_AIX) || defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE)
  76. struct hostent *my_gethostbyname_r(const char *name,
  77.    struct hostent *result, char *buffer,
  78.    int buflen, int *h_errnop);
  79. #define my_gethostbyname_r_free()
  80. #if !defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) && !defined(HPUX10)
  81. #define GETHOSTBYNAME_BUFF_SIZE sizeof(struct hostent_data)
  82. #endif /* !defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) */
  83. #elif defined(HAVE_GETHOSTBYNAME_R_RETURN_INT)
  84. #define GETHOSTBYNAME_BUFF_SIZE sizeof(struct hostent_data)
  85. struct hostent *my_gethostbyname_r(const char *name,
  86.    struct hostent *result, char *buffer,
  87.    int buflen, int *h_errnop);
  88. #define my_gethostbyname_r_free()
  89. #else
  90. #define my_gethostbyname_r(A,B,C,D,E) gethostbyname_r((A),(B),(C),(D),(E))
  91. #define my_gethostbyname_r_free()
  92. #endif /* !defined(HAVE_GETHOSTBYNAME_R) */
  93. #ifndef GETHOSTBYNAME_BUFF_SIZE
  94. #define GETHOSTBYNAME_BUFF_SIZE 2048
  95. #endif
  96. /* On SCO you get a link error when refering to h_errno */
  97. #ifdef SCO
  98. #undef h_errno
  99. #define h_errno errno
  100. #endif
  101. C_MODE_END
  102. #endif