129 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
		
		
			
		
	
	
			129 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
| 
								 | 
							
								/* Copyright (c) 2000-2004, 2006 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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 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
							 |