129 lines
3.6 KiB
C
129 lines
3.6 KiB
C
|
/* Copyright (C) 2000 MySQL AB
|
||
|
|
||
|
This program is free software; you can redistribute it and/or modify
|
||
|
it under the terms of the GNU General Public License as published by
|
||
|
the Free Software Foundation; version 2 of the License.
|
||
|
|
||
|
This program is distributed in the hope that it will be useful,
|
||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
GNU General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU General Public License
|
||
|
along with this program; if not, write to the Free Software
|
||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||
|
|
||
|
/*
|
||
|
thread safe version of some common functions:
|
||
|
my_inet_ntoa
|
||
|
|
||
|
This file is also used to make handling of sockets and ioctl()
|
||
|
portable accross systems.
|
||
|
|
||
|
*/
|
||
|
|
||
|
#ifndef _my_net_h
|
||
|
#define _my_net_h
|
||
|
C_MODE_START
|
||
|
|
||
|
#include <errno.h>
|
||
|
#ifdef HAVE_SYS_SOCKET_H
|
||
|
#include <sys/socket.h>
|
||
|
#endif
|
||
|
#ifdef HAVE_NETINET_IN_H
|
||
|
#include <netinet/in.h>
|
||
|
#endif
|
||
|
#ifdef HAVE_ARPA_INET_H
|
||
|
#include <arpa/inet.h>
|
||
|
#endif
|
||
|
#ifdef HAVE_POLL
|
||
|
#include <sys/poll.h>
|
||
|
#endif
|
||
|
#ifdef HAVE_SYS_IOCTL_H
|
||
|
#include <sys/ioctl.h>
|
||
|
#endif
|
||
|
|
||
|
#if !defined(__WIN__) && !defined(HAVE_BROKEN_NETINET_INCLUDES) && !defined(__BEOS__) && !defined(__NETWARE__)
|
||
|
#include <netinet/in_systm.h>
|
||
|
#include <netinet/in.h>
|
||
|
#include <netinet/ip.h>
|
||
|
#if !defined(alpha_linux_port)
|
||
|
#include <netinet/tcp.h>
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#if defined(__WIN__)
|
||
|
#define O_NONBLOCK 1 /* For emulation of fcntl() */
|
||
|
|
||
|
/*
|
||
|
SHUT_RDWR is called SD_BOTH in windows and
|
||
|
is defined to 2 in winsock2.h
|
||
|
#define SD_BOTH 0x02
|
||
|
*/
|
||
|
#define SHUT_RDWR 0x02
|
||
|
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
On OSes which don't have the in_addr_t, we guess that using uint32 is the best
|
||
|
possible choice. We guess this from the fact that on HP-UX64bit & FreeBSD64bit
|
||
|
& Solaris64bit, in_addr_t is equivalent to uint32. And on Linux32bit too.
|
||
|
*/
|
||
|
#ifndef HAVE_IN_ADDR_T
|
||
|
#define in_addr_t uint32
|
||
|
#endif
|
||
|
|
||
|
/* On some operating systems (e.g. Solaris) INADDR_NONE is not defined */
|
||
|
#ifndef INADDR_NONE
|
||
|
#define INADDR_NONE -1 /* Error value from inet_addr */
|
||
|
#endif
|
||
|
|
||
|
/* Thread safe or portable version of some functions */
|
||
|
|
||
|
void my_inet_ntoa(struct in_addr in, char *buf);
|
||
|
|
||
|
/*
|
||
|
Handling of gethostbyname_r()
|
||
|
*/
|
||
|
|
||
|
#if !defined(HPUX10)
|
||
|
struct hostent;
|
||
|
#endif /* HPUX */
|
||
|
#if !defined(HAVE_GETHOSTBYNAME_R)
|
||
|
struct hostent *my_gethostbyname_r(const char *name,
|
||
|
struct hostent *result, char *buffer,
|
||
|
int buflen, int *h_errnop);
|
||
|
void my_gethostbyname_r_free();
|
||
|
#elif defined(HAVE_PTHREAD_ATTR_CREATE) || defined(_AIX) || defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE)
|
||
|
struct hostent *my_gethostbyname_r(const char *name,
|
||
|
struct hostent *result, char *buffer,
|
||
|
int buflen, int *h_errnop);
|
||
|
#define my_gethostbyname_r_free()
|
||
|
#if !defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) && !defined(HPUX10)
|
||
|
#define GETHOSTBYNAME_BUFF_SIZE sizeof(struct hostent_data)
|
||
|
#endif /* !defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) */
|
||
|
|
||
|
#elif defined(HAVE_GETHOSTBYNAME_R_RETURN_INT)
|
||
|
#define GETHOSTBYNAME_BUFF_SIZE sizeof(struct hostent_data)
|
||
|
struct hostent *my_gethostbyname_r(const char *name,
|
||
|
struct hostent *result, char *buffer,
|
||
|
int buflen, int *h_errnop);
|
||
|
#define my_gethostbyname_r_free()
|
||
|
#else
|
||
|
#define my_gethostbyname_r(A,B,C,D,E) gethostbyname_r((A),(B),(C),(D),(E))
|
||
|
#define my_gethostbyname_r_free()
|
||
|
#endif /* !defined(HAVE_GETHOSTBYNAME_R) */
|
||
|
|
||
|
#ifndef GETHOSTBYNAME_BUFF_SIZE
|
||
|
#define GETHOSTBYNAME_BUFF_SIZE 2048
|
||
|
#endif
|
||
|
|
||
|
/* On SCO you get a link error when refering to h_errno */
|
||
|
#ifdef SCO
|
||
|
#undef h_errno
|
||
|
#define h_errno errno
|
||
|
#endif
|
||
|
|
||
|
C_MODE_END
|
||
|
#endif
|