Blame WWW/Library/Implementation/www_tcp.h

Packit f574b8
/*                System dependencies in the W3 library
Packit f574b8
 * $LynxId: www_tcp.h,v 1.59 2018/05/16 20:31:43 tom Exp $
Packit f574b8
 *
Packit f574b8
                                   SYSTEM DEPENDENCIES
Packit f574b8
Packit f574b8
   System-system differences for TCP include files and macros.  This
Packit f574b8
   file includes for each system the files necessary for network and
Packit f574b8
   file I/O.  It should be used in conjunction with HTUtils.h to help
Packit f574b8
   ensure portability across as many platforms and flavors of platforms
Packit f574b8
   as possible.
Packit f574b8
Packit f574b8
  AUTHORS
Packit f574b8
Packit f574b8
  TBL                Tim Berners-Lee, W3 project, CERN, <timbl@info.cern.ch>
Packit f574b8
  EvA                     Eelco van Asperen <evas@cs.few.eur.nl>
Packit f574b8
  MA                      Marc Andreessen NCSA
Packit f574b8
  AT                      Aleksandar Totic <atotic@ncsa.uiuc.edu>
Packit f574b8
  SCW                     Susan C. Weber <sweber@kyle.eitech.com>
Packit f574b8
Packit f574b8
  HISTORY:
Packit f574b8
  22 Feb 91               Written (TBL) as part of the WWW library.
Packit f574b8
  16 Jan 92               PC code from EvA
Packit f574b8
  22 Apr 93               Merged diffs bits from xmosaic release
Packit f574b8
  29 Apr 93               Windows/NT code from SCW
Packit f574b8
  20 May 94		  A.Harper Add support for VMS CMU TCP/IP transport
Packit f574b8
   3 Oct 94		  A.Harper Add support for VMS SOCKETSHR/NETLIB
Packit f574b8
  15 Jul 95               S. Bjorndahl Gnu C for VMS Globaldef/ref support
Packit f574b8
Packit f574b8
*/
Packit f574b8
Packit f574b8
#ifndef TCP_H
Packit f574b8
#define TCP_H
Packit f574b8
Packit f574b8
/*
Packit f574b8
Packit f574b8
Default values
Packit f574b8
Packit f574b8
   These values may be reset and altered by system-specific sections
Packit f574b8
   later on.  there are also a bunch of defaults at the end .
Packit f574b8
Packit f574b8
 */
Packit f574b8
/* Default values of those: */
Packit f574b8
	/* Routine to close a TCP-IP socket         */
Packit f574b8
#define NETCLOSE close
Packit f574b8
	/* Routine to read from a TCP-IP socket     */
Packit f574b8
#define NETREAD(s,p,n) \
Packit f574b8
	HTDoRead(s, p, (unsigned)(n))
Packit f574b8
	/* Routine to write to a TCP-IP socket      */
Packit f574b8
#define NETWRITE(s,p,n)		write(s, p, (size_t)(n))
Packit f574b8
#define SOCKET_READ(s,b,l)	read(s,b,(size_t)(l))
Packit f574b8
#define IOCTL(s,cmd,arg)	ioctl(s,(long)(cmd),arg)
Packit f574b8
#define SOCKET_ERRNO errno	/* normal socket errno */
Packit f574b8
Packit f574b8
/* Unless stated otherwise, */
Packit f574b8
#define SELECT			/* Can handle >1 channel.               */
Packit f574b8
#define GOT_SYSTEM		/* Can call shell with string           */
Packit f574b8
Packit f574b8
#ifdef UNIX
Packit f574b8
#define GOT_PIPE
Packit f574b8
#endif /* UNIX */
Packit f574b8
Packit f574b8
#define INVSOC (-1)		/* Unix invalid socket */
Packit f574b8
		/* NB: newer libwww has something different for Windows */
Packit f574b8
Packit f574b8
#ifndef VMS
Packit f574b8
Packit f574b8
#include <sys/types.h>
Packit f574b8
Packit f574b8
#if defined(__BORLANDC__)
Packit f574b8
#define DECL_ERRNO
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#if defined(__DJGPP__) || defined(__BORLANDC__)
Packit f574b8
#undef HAVE_DIRENT_H
Packit f574b8
#define HAVE_DIRENT_H
Packit f574b8
#undef HAVE_SYS_FILIO_H
Packit f574b8
#endif /* DJGPP or __BORLANDC__ */
Packit f574b8
Packit f574b8
#if defined(_MSC_VER)
Packit f574b8
#undef HAVE_DIRENT_H
Packit f574b8
#define HAVE_DIRENT_H
Packit f574b8
#undef HAVE_SYS_FILIO_H
Packit f574b8
#endif /* _MSC_VER */
Packit f574b8
Packit f574b8
#ifdef HAVE_DIRENT_H
Packit f574b8
# include <dirent.h>
Packit f574b8
# define D_NAMLEN(dirent) strlen((dirent)->d_name)
Packit f574b8
# define STRUCT_DIRENT struct dirent
Packit f574b8
#else
Packit f574b8
# define D_NAMLEN(dirent) (dirent)->d_namlen
Packit f574b8
# define STRUCT_DIRENT struct direct
Packit f574b8
# ifdef HAVE_SYS_NDIR_H
Packit f574b8
#  include <sys/ndir.h>
Packit f574b8
# endif
Packit f574b8
# ifdef HAVE_SYS_DIR_H
Packit f574b8
#  include <sys/dir.h>
Packit f574b8
# endif
Packit f574b8
# ifdef HAVE_NDIR_H
Packit f574b8
#  include <ndir.h>
Packit f574b8
# endif
Packit f574b8
#endif /* HAVE_DIRENT_H */
Packit f574b8
Packit f574b8
#ifdef HAVE_STRUCT_DIRENT64
Packit f574b8
# undef STRUCT_DIRENT
Packit f574b8
# define STRUCT_DIRENT struct dirent64
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#if !(defined(DOSPATH) || defined(__EMX__) || defined(__CYGWIN__))
Packit f574b8
#define STRUCT_DIRENT__D_INO 1
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#endif /* !VMS */
Packit f574b8
Packit f574b8
#ifdef TIME_WITH_SYS_TIME
Packit f574b8
# include <sys/time.h>
Packit f574b8
# include <time.h>
Packit f574b8
#else
Packit f574b8
# ifdef HAVE_SYS_TIME_H
Packit f574b8
#  include <sys/time.h>
Packit f574b8
# else
Packit f574b8
#  include <time.h>
Packit f574b8
# endif
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#if defined(_AIX) && !defined(AIX)
Packit f574b8
#define AIX
Packit f574b8
#endif /* _AIX */
Packit f574b8
Packit f574b8
#ifndef __CYGWIN__
Packit f574b8
#ifdef WIN_EX
Packit f574b8
#define HAVE_FTIME 1
Packit f574b8
#define HAVE_SYS_TIMEB_H 1
Packit f574b8
#endif
Packit f574b8
#endif /* __CYGWIN__ */
Packit f574b8
Packit f574b8
#ifdef HAVE_FCNTL_H
Packit f574b8
#include <fcntl.h>
Packit f574b8
#else
Packit f574b8
#ifdef HAVE_SYS_FCNTL_H
Packit f574b8
#include <sys/fcntl.h>
Packit f574b8
#endif
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#ifdef HAVE_STRING_H
Packit f574b8
#include <string.h>		/* For bzero etc */
Packit f574b8
#endif /* HAVE_STRING_H */
Packit f574b8
Packit f574b8
/*
Packit f574b8
Packit f574b8
  MACROS FOR CONVERTING CHARACTERS
Packit f574b8
Packit f574b8
 */
Packit f574b8
#ifndef TOASCII
Packit f574b8
#ifdef EBCDIC			/* S/390 -- gil -- 1327 */
Packit f574b8
Packit f574b8
extern const char un_IBM1047[];
Packit f574b8
extern const unsigned char IBM1047[];
Packit f574b8
Packit f574b8
/* For debugging
Packit f574b8
#include <assert.h>
Packit f574b8
#define   TOASCII(c) (assert((c)>=0 && (c)<256), un_IBM1047[c])
Packit f574b8
*/
Packit f574b8
/* for production */
Packit f574b8
#define   TOASCII(c) (un_IBM1047[c])
Packit f574b8
Packit f574b8
#define FROMASCII(c) (IBM1047[c])
Packit f574b8
Packit f574b8
#else /* EBCDIC */
Packit f574b8
Packit f574b8
#if '0' != 48
Packit f574b8
error Host character set is not ASCII.
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#define TOASCII(c) (c)
Packit f574b8
#define FROMASCII(c) (c)
Packit f574b8
Packit f574b8
#endif				/* EBCDIC */
Packit f574b8
#endif				/* !TOASCII */
Packit f574b8
Packit f574b8
/* convert a char to an unsigned, needed if we have signed characters for ctype.h */
Packit f574b8
#define UCH(ch) ((unsigned char)(ch))
Packit f574b8
Packit f574b8
/*
Packit f574b8
 * These parameters were provided by Nigel Horne, using BeOS professional 5.0
Packit f574b8
 */
Packit f574b8
#ifdef  __BEOS__
Packit f574b8
#undef NETREAD
Packit f574b8
#undef NETWRITE
Packit f574b8
#undef NETCLOSE
Packit f574b8
#define NETREAD(s,b,l)  recv((s),(b),(l),0)
Packit f574b8
#define NETWRITE(s,b,l) send((s),(b),(l),0)
Packit f574b8
#define NETCLOSE(s)     closesocket(s)
Packit f574b8
#endif
Packit f574b8
Packit f574b8
/*
Packit f574b8
IBM-PC running Windows NT
Packit f574b8
Packit f574b8
	These parameters provided by  Susan C. Weber <sweber@kyle.eitech.com>.
Packit f574b8
*/
Packit f574b8
Packit f574b8
#ifdef _WINDOWS
Packit f574b8
Packit f574b8
#ifndef _WINDOWS_NSL
Packit f574b8
#define _WINDOWS_NSL
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#include <fcntl.h>		/* For HTFile.c */
Packit f574b8
#include <sys/types.h>		/* For HTFile.c */
Packit f574b8
#include <sys/stat.h>		/* For HTFile.c */
Packit f574b8
#undef NETREAD
Packit f574b8
#undef NETWRITE
Packit f574b8
#undef NETCLOSE
Packit f574b8
#undef IOCTL
Packit f574b8
extern int ws_netread(int fd, char *buf, int len);
Packit f574b8
Packit f574b8
#define NETREAD(s,b,l)  ws_netread((s),(b),(l))		/* 1997/11/06 (Thu) */
Packit f574b8
#define NETWRITE(s,b,l) send((s),(b),(l),0)
Packit f574b8
#define NETCLOSE(s)     closesocket(s)
Packit f574b8
#define IOCTL(s,cmd,arg)	ioctlsocket(s,cmd,arg)
Packit f574b8
#include <io.h>
Packit f574b8
#include <string.h>
Packit f574b8
#include <process.h>
Packit f574b8
#include <time.h>
Packit f574b8
#include <errno.h>
Packit f574b8
#include <direct.h>
Packit f574b8
Packit f574b8
#ifdef ENABLE_IPV6
Packit f574b8
#undef  USE_WINSOCK2_H
Packit f574b8
#define USE_WINSOCK2_H
Packit f574b8
Packit f574b8
/* Avoid including <winsock*.h> in <windows.h> */
Packit f574b8
#ifndef WIN32_LEAN_AND_MEAN
Packit f574b8
#error Define "WIN32_LEAN_AND_MEAN" in your makefile
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#ifdef _WINSOCKAPI_
Packit f574b8
#error windows.h included before winsock2.h
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#if defined(_MSC_VER) && (!defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0501)
Packit f574b8
/*
Packit f574b8
 * Needed to pull in the real getaddrinfo() and not the inline version
Packit f574b8
 * in <wspiAPI.H> which doesn't support IPv6 (IPv4 only). <wspiAPI.H> is
Packit f574b8
 * included from <ws2tcpip.h> for <= 0x0500 SDKs.
Packit f574b8
 */
Packit f574b8
#undef  _WIN32_WINNT
Packit f574b8
#define _WIN32_WINNT 0x0501
Packit f574b8
#endif
Packit f574b8
#endif /* ENABLE_IPV6 */
Packit f574b8
Packit f574b8
#ifdef USE_WINSOCK2_H
Packit f574b8
#include <winsock2.h>		/* normally included in windows.h */
Packit f574b8
Packit f574b8
#ifdef ENABLE_IPV6
Packit f574b8
#include <ws2tcpip.h>
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#undef EINPROGRESS
Packit f574b8
#undef EALREADY
Packit f574b8
#undef EISCONN
Packit f574b8
#undef EINTR
Packit f574b8
#undef EAGAIN
Packit f574b8
#undef ENOTCONN
Packit f574b8
#undef ECONNRESET
Packit f574b8
#undef ETIMEDOUT
Packit f574b8
Packit f574b8
#define EINPROGRESS  WSAEINPROGRESS
Packit f574b8
#define EALREADY     WSAEALREADY
Packit f574b8
#define EISCONN      WSAEISCONN
Packit f574b8
#define EINTR        WSAEINTR
Packit f574b8
/* fine EAGAIN       WSAEAGAIN */
Packit f574b8
#define ENOTCONN     WSAENOTCONN
Packit f574b8
#define ECONNRESET   WSAECONNRESET
Packit f574b8
#define ETIMEDOUT    WSAETIMEDOUT
Packit f574b8
Packit f574b8
#else /* USE_WINSOCK2_H */
Packit f574b8
Packit f574b8
#include <winsock.h>
Packit f574b8
Packit f574b8
#if defined(_MSC_VER) || defined(__MINGW32__)
Packit f574b8
#undef EINTR
Packit f574b8
#undef EAGAIN
Packit f574b8
#endif /* _MSC_VER */
Packit f574b8
Packit f574b8
#undef EINPROGRESS
Packit f574b8
#define EINPROGRESS          (WSABASEERR+36)
Packit f574b8
Packit f574b8
#undef EALREADY
Packit f574b8
#define EALREADY             (WSABASEERR+37)
Packit f574b8
Packit f574b8
#undef EISCONN
Packit f574b8
#define EISCONN              (WSABASEERR+56)
Packit f574b8
Packit f574b8
#undef EINTR
Packit f574b8
#define EINTR                (WSABASEERR+4)
Packit f574b8
Packit f574b8
#undef EAGAIN
Packit f574b8
#define EAGAIN               (WSABASEERR+1002)
Packit f574b8
Packit f574b8
#undef ENOTCONN
Packit f574b8
#define ENOTCONN             (WSABASEERR+57)
Packit f574b8
Packit f574b8
#undef ECONNRESET
Packit f574b8
#define ECONNRESET           (WSABASEERR+54)
Packit f574b8
Packit f574b8
#undef ETIMEDOUT
Packit f574b8
#define ETIMEDOUT             WSAETIMEDOUT
Packit f574b8
Packit f574b8
#endif /* USE_WINSOCK2_H */
Packit f574b8
Packit f574b8
#undef  SOCKET_ERRNO
Packit f574b8
#define SOCKET_ERRNO          WSAGetLastError()
Packit f574b8
Packit f574b8
#define INCLUDES_DONE
Packit f574b8
#define TCP_INCLUDES_DONE
Packit f574b8
#endif /* WINDOWS */
Packit f574b8
Packit f574b8
/*
Packit f574b8
Packit f574b8
VAX/VMS
Packit f574b8
Packit f574b8
   Under VMS, there are many versions of TCP-IP. Define one if you do
Packit f574b8
   not use Digital's UCX product:
Packit f574b8
Packit f574b8
  UCX                     DEC's "Ultrix connection" (default)
Packit f574b8
  CMU_TCP                 Available via FTP from sacusr.mp.usbr.gov
Packit f574b8
  SOCKETSHR               Eckhart Meyer's interface to NETLIB
Packit f574b8
  WIN_TCP                 From Wollongong, now GEC software.
Packit f574b8
  MULTINET                From SRI, became TGV, then Cisco.
Packit f574b8
  DECNET                  Cern's TCP socket emulation over DECnet
Packit f574b8
  TCPIP_SERVICES          TCP/IP Services (newer than UCX)
Packit f574b8
Packit f574b8
   WIN_TCP, MULTINET and DECNET do not interfere with the
Packit f574b8
   unix i/o library, and so they need special calls to read, write and
Packit f574b8
   close sockets.  In these cases the socket number is a VMS channel
Packit f574b8
   number, so we make the @@@ HORRIBLE @@@ assumption that a channel
Packit f574b8
   number will be greater than 10 but a unix file descriptor less than
Packit f574b8
   10.  It works.
Packit f574b8
Packit f574b8
 */
Packit f574b8
#ifdef VMS
Packit f574b8
Packit f574b8
#ifdef UCX
Packit f574b8
#undef IOCTL
Packit f574b8
#define IOCTL(s,cmd,arg)	HTioctl(s,cmd,arg)
Packit f574b8
#endif /* UCX */
Packit f574b8
Packit f574b8
#ifdef WIN_TCP
Packit f574b8
#undef SOCKET_READ
Packit f574b8
#undef NETWRITE
Packit f574b8
#undef NETCLOSE
Packit f574b8
#define SOCKET_READ(s,b,l)  ((s)>10 ? netread((s),(b),(l)) : read((s),(b),(l)))
Packit f574b8
#define NETWRITE(s,b,l)     ((s)>10 ? netwrite((s),(b),(l)) : write((s),(b),(l)))
Packit f574b8
#define NETCLOSE(s)         ((s)>10 ? netclose(s) : close(s))
Packit f574b8
#undef IOCTL
Packit f574b8
#define IOCTL(a,b,c) -1		/* disables ioctl function            */
Packit f574b8
#define NO_IOCTL		/* flag to check if ioctl is disabled */
Packit f574b8
#endif /* WIN_TCP */
Packit f574b8
Packit f574b8
#ifdef CMU_TCP
Packit f574b8
#undef SOCKET_READ
Packit f574b8
#undef NETREAD
Packit f574b8
#undef NETWRITE
Packit f574b8
#undef NETCLOSE
Packit f574b8
#define SOCKET_READ(s,b,l) (cmu_get_sdc((s)) != 0 ? cmu_read((s),(b),(l)) : read((s),(b),(l)))
Packit f574b8
#define NETREAD(s,b,l)     (cmu_get_sdc((s)) != 0 ? HTDoRead((s),(b),(l)) : read((s),(b),(l)))
Packit f574b8
#define NETWRITE(s,b,l)    (cmu_get_sdc((s)) != 0 ? cmu_write((s),(b),(l)) : write((s),(b),(l)))
Packit f574b8
#define NETCLOSE(s)        (cmu_get_sdc((s)) != 0 ? cmu_close((s)) : close((s)))
Packit f574b8
#endif /* CMU_TCP */
Packit f574b8
Packit f574b8
#ifdef MULTINET
Packit f574b8
#undef NETCLOSE
Packit f574b8
#undef SOCKET_READ
Packit f574b8
#undef NETWRITE
Packit f574b8
#undef IOCTL
Packit f574b8
#undef SOCKET_ERRNO
Packit f574b8
/*
Packit f574b8
 *  Delete these socket_foo() prototypes as MultiNet adds them
Packit f574b8
 *  to it's socket library headers.  Compiler warnings due to
Packit f574b8
 *  the absence of arguments in the generic prototypes here will
Packit f574b8
 *  include the names of those which can be deleted. - FM
Packit f574b8
 */
Packit f574b8
extern int socket_read();
Packit f574b8
extern int socket_write();
Packit f574b8
extern int socket_close();
Packit f574b8
extern int socket_ioctl();
Packit f574b8
Packit f574b8
#define SOCKET_READ(s,b,l)  ((s)>10 ? socket_read((s),(b),(l)) : \
Packit f574b8
				read((s),(b),(l)))
Packit f574b8
#define NETWRITE(s,b,l)     ((s)>10 ? socket_write((s),(b),(l)) : \
Packit f574b8
                                write((s),(b),(l)))
Packit f574b8
#define NETCLOSE(s)         ((s)>10 ? socket_close(s) : close(s))
Packit f574b8
#define IOCTL(s,cmd,arg)	socket_ioctl(s,cmd,arg)
Packit f574b8
#define SOCKET_ERRNO socket_errno
Packit f574b8
#endif /* MULTINET */
Packit f574b8
Packit f574b8
#ifdef SOCKETSHR_TCP
Packit f574b8
#undef SOCKET_READ
Packit f574b8
#undef NETREAD
Packit f574b8
#undef NETWRITE
Packit f574b8
#undef NETCLOSE
Packit f574b8
#undef IOCTL
Packit f574b8
#define SOCKET_READ(s,b,l)  (si_get_sdc((s)) != 0 ? si_read((s),(b),(l)) : \
Packit f574b8
                                read((s),(b),(l)))
Packit f574b8
#define NETREAD(s,b,l)      (si_get_sdc((s)) != 0 ? HTDoRead((s),(b),(l)) : \
Packit f574b8
                                read((s),(b),(l)))
Packit f574b8
#define NETWRITE(s,b,l)     (si_get_sdc((s)) != 0 ? si_write((s),(b),(l)) : \
Packit f574b8
                                write((s),(b),(l)))
Packit f574b8
#define NETCLOSE(s)         (si_get_sdc((s)) != 0 ? si_close((s)) : close((s)))
Packit f574b8
#define IOCTL(s,cmd,arg)	si_ioctl(s,cmd,arg)
Packit f574b8
#endif /* SOCKETSHR_TCP */
Packit f574b8
Packit f574b8
#ifdef TCPIP_SERVICES
Packit f574b8
/*
Packit f574b8
 * TCPIP Services has all of the entrypoints including ioctl().
Packit f574b8
 */
Packit f574b8
#undef NETWRITE
Packit f574b8
#define NETWRITE(s,b,l) send((s),(char *)(b),(l),0)
Packit f574b8
Packit f574b8
#define TYPE_FD_SET int
Packit f574b8
Packit f574b8
#if 0				/* this should be declared via time.h */
Packit f574b8
typedef TYPE_FD_SET fd_set;
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#endif /* TCPIP_SERVICES */
Packit f574b8
Packit f574b8
#include <string.h>
Packit f574b8
Packit f574b8
#include <file.h>
Packit f574b8
#include <stat.h>
Packit f574b8
#include <unixio.h>
Packit f574b8
#include <unixlib.h>
Packit f574b8
Packit f574b8
#define INCLUDES_DONE
Packit f574b8
Packit f574b8
#ifdef MULTINET			/* Include from standard Multinet directories */
Packit f574b8
/*
Packit f574b8
 *  Delete any of these multinet_foo() and associated prototypes
Packit f574b8
 *  as MultiNet adds them to its socket library headers.  You'll
Packit f574b8
 *  get compiler warnings about them, due the absence of arguments
Packit f574b8
 *  in the generic prototyping here, and the warnings will include
Packit f574b8
 *  the names of the functions whose prototype entries can be
Packit f574b8
 *  deleted here. - FM
Packit f574b8
 */
Packit f574b8
extern int multinet_accept();
Packit f574b8
extern int multinet_bind();
Packit f574b8
extern int multinet_connect();
Packit f574b8
extern int multinet_gethostname();
Packit f574b8
extern int multinet_getsockname();
Packit f574b8
extern unsigned short multinet_htons(unsigned short __val);
Packit f574b8
extern unsigned short multinet_ntohs(unsigned short __val);
Packit f574b8
extern int multinet_listen();
Packit f574b8
extern int multinet_select();
Packit f574b8
extern int multinet_socket();
Packit f574b8
extern char *vms_errno_string();
Packit f574b8
Packit f574b8
#ifndef __SOCKET_TYPEDEFS
Packit f574b8
#define __SOCKET_TYPEDEFS 1
Packit f574b8
#endif /* !__SOCKET_TYPEDEFS */
Packit f574b8
Packit f574b8
#include <time.h>
Packit f574b8
#include <types.h>
Packit f574b8
/*
Packit f574b8
 * DEC C before version 5.2 added some typedefs to <types.h> which happen
Packit f574b8
 * to be suppressed if the version-4 compatibility define is set.  In
Packit f574b8
 * particular, lynx uses "off_t".  VAX-C used "unsigned", DEC-C uses "int".
Packit f574b8
 */
Packit f574b8
#if defined(_DECC_V4_SOURCE) && !defined(____OFF_T)
Packit f574b8
#undef off_t
Packit f574b8
#define off_t int
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#ifdef __TIME_T
Packit f574b8
#undef  __TYPES
Packit f574b8
#define __TYPES 1
Packit f574b8
#define __TYPES_LOADED 1
Packit f574b8
#endif /* __TIME_T */
Packit f574b8
Packit f574b8
#ifdef __SOCKET_TYPEDEFS
Packit f574b8
#undef __SOCKET_TYPEDEFS
Packit f574b8
#endif /* __SOCKET_TYPEDEFS */
Packit f574b8
Packit f574b8
#include "multinet_root:[multinet.include.sys]types.h"
Packit f574b8
Packit f574b8
#ifndef __SOCKET_TYPEDEFS
Packit f574b8
#define __SOCKET_TYPEDEFS 1
Packit f574b8
#endif /* !__SOCKET_TYPEDEFS */
Packit f574b8
Packit f574b8
#include "multinet_root:[multinet.include]errno.h"
Packit f574b8
Packit f574b8
#ifdef __TYPES
Packit f574b8
#undef  __TIME_T
Packit f574b8
#define __TIME_T 1
Packit f574b8
#endif /* __TYPE */
Packit f574b8
Packit f574b8
#ifdef __TIME_LOADED
Packit f574b8
#undef  __TIME
Packit f574b8
#define __TIME 1		/* to avoid double definitions in in.h */
Packit f574b8
#endif /* __TIME_LOADED */
Packit f574b8
Packit f574b8
#include "multinet_root:[multinet.include.sys]time.h"
Packit f574b8
Packit f574b8
#define MULTINET_NO_PROTOTYPES	/* DECC is compatible-but-different */
Packit f574b8
#include "multinet_root:[multinet.include.sys]socket.h"
Packit f574b8
#undef MULTINET_NO_PROTOTYPES
Packit f574b8
#include "multinet_root:[multinet.include.netinet]in.h"
Packit f574b8
#include "multinet_root:[multinet.include.arpa]inet.h"
Packit f574b8
#include "multinet_root:[multinet.include]netdb.h"
Packit f574b8
#include "multinet_root:[multinet.include.sys]ioctl.h"
Packit f574b8
#define TCP_INCLUDES_DONE
Packit f574b8
/*
Packit f574b8
 *  Uncomment this if you get compiler messages
Packit f574b8
 *  about struct timeval having no linkage. - FM
Packit f574b8
 */
Packit f574b8
/*#define NO_TIMEVAL*/
Packit f574b8
#ifdef NO_TIMEVAL
Packit f574b8
struct timeval {
Packit f574b8
    long tv_sec;		/* seconds since Jan. 1, 1970 */
Packit f574b8
    long tv_usec;		/* microseconds */
Packit f574b8
};
Packit f574b8
#endif /* NO_TIMEVAL */
Packit f574b8
#endif /* MULTINET */
Packit f574b8
Packit f574b8
#ifdef DECNET
Packit f574b8
#include <types.h>
Packit f574b8
#include <errno.h>
Packit f574b8
#include <time.h>
Packit f574b8
#include <types.h>		/* for socket.h */
Packit f574b8
#include <socket.h>
Packit f574b8
#include <dn>
Packit f574b8
#include <dnetdb>
Packit f574b8
/* #include "vms.h" */
Packit f574b8
#define TCP_INCLUDES_DONE
Packit f574b8
#endif /* DECNET */
Packit f574b8
Packit f574b8
#ifdef UCX
Packit f574b8
#include <types.h>
Packit f574b8
#include <errno.h>
Packit f574b8
#include <time.h>
Packit f574b8
#include <socket.h>
Packit f574b8
#include <in.h>
Packit f574b8
#include <inet.h>
Packit f574b8
#if defined(TCPWARE) && !defined(__DECC)
Packit f574b8
#include "tcpware_include:netdb.h"
Packit f574b8
#include "tcpware_include:ucx$inetdef.h"
Packit f574b8
#else
Packit f574b8
#include <netdb.h>
Packit f574b8
#ifdef MUCX
Packit f574b8
#include <multinet_root:[multinet.include.vms]ucx$inetdef.h>
Packit f574b8
#else
Packit f574b8
#include <ucx$inetdef.h>
Packit f574b8
#endif /* MUCX */
Packit f574b8
#endif /* TCPWARE */
Packit f574b8
#define TCP_INCLUDES_DONE
Packit f574b8
#endif /* UCX */
Packit f574b8
Packit f574b8
#ifdef CMU_TCP
Packit f574b8
#include <types.h>
Packit f574b8
#include <errno.h>
Packit f574b8
#include "cmuip_root:[syslib]time.h"
Packit f574b8
#include "cmuip_root:[syslib]socket.h"
Packit f574b8
#include <in.h>
Packit f574b8
#include <inet.h>
Packit f574b8
#include <netdb.h>
Packit f574b8
#include "cmuip_root:[syslib]ioctl.h"
Packit f574b8
#define TCP_INCLUDES_DONE
Packit f574b8
#endif /* CMU_TCP */
Packit f574b8
Packit f574b8
#ifdef SOCKETSHR_TCP
Packit f574b8
#include <types.h>
Packit f574b8
#include <errno.h>
Packit f574b8
#include <time.h>
Packit f574b8
#include <socket.h>
Packit f574b8
#include <in.h>
Packit f574b8
#include <inet.h>
Packit f574b8
#include <netdb.h>
Packit f574b8
#include "socketshr_library:socketshr.h"
Packit f574b8
#include "socketshr_library:ioctl.h"
Packit f574b8
#define TCP_INCLUDES_DONE
Packit f574b8
#endif /* SOCKETSHR_TCP */
Packit f574b8
Packit f574b8
#ifdef TCPIP_SERVICES
Packit f574b8
#include <types.h>
Packit f574b8
#include <errno.h>
Packit f574b8
#include <time.h>
Packit f574b8
#include <ioctl.h>
Packit f574b8
#include <socket.h>
Packit f574b8
#include <in.h>
Packit f574b8
#include <inet.h>
Packit f574b8
#include <netdb.h>
Packit f574b8
#define TCP_INCLUDES_DONE
Packit f574b8
#endif /* TCPIP_SERVICES */
Packit f574b8
Packit f574b8
#ifdef WIN_TCP
Packit f574b8
#include <types.h>
Packit f574b8
#include <errno.h>
Packit f574b8
#include <time.h>
Packit f574b8
#include <socket.h>
Packit f574b8
#include <in.h>
Packit f574b8
#include <inet.h>
Packit f574b8
#include <netdb.h>
Packit f574b8
#ifndef NO_IOCTL
Packit f574b8
#include <ioctl.h>
Packit f574b8
#endif /* !NO_IOCTL */
Packit f574b8
#define TCP_INCLUDES_DONE
Packit f574b8
#endif /* WIN_TCP */
Packit f574b8
Packit f574b8
#ifndef TCP_INCLUDES_DONE
Packit f574b8
#include <types.h>
Packit f574b8
#include <errno.h>
Packit f574b8
#include <time.h>
Packit f574b8
#ifdef VMS_SOCKET_HEADERS
Packit f574b8
/*
Packit f574b8
 *  Not all versions of VMS have the full set of headers
Packit f574b8
 *  for socket library functions, because the TCP/IP
Packit f574b8
 *  packages were layered products.  If we want these
Packit f574b8
 *  specifically, instead of those for the above packages,
Packit f574b8
 *  the module should be compiled with VMS_SOCKET_HEADERS
Packit f574b8
 *  defined instead of layered product definitions, above.
Packit f574b8
 *  If the module is not using socket library functions,
Packit f574b8
 *  none of the definitions need be used, and we include
Packit f574b8
 *  only the above three headers. - FM
Packit f574b8
 */
Packit f574b8
#include <socket.h>
Packit f574b8
#include <in.h>
Packit f574b8
#include <inet.h>
Packit f574b8
#include <netdb.h>
Packit f574b8
#include <ioctl.h>
Packit f574b8
#endif /* VMS_SOCKET_HEADERS */
Packit f574b8
#define TCP_INCLUDES_DONE
Packit f574b8
#endif /* !TCP_INCLUDES_DONE */
Packit f574b8
Packit f574b8
/*
Packit f574b8
 * On VMS machines, the linker needs to be told to put global data sections
Packit f574b8
 * into a data segment using these storage classes.  (MarkDonszelmann)
Packit f574b8
 */
Packit f574b8
#if defined(VAXC) && !defined(__DECC)
Packit f574b8
#define GLOBALDEF globaldef
Packit f574b8
#define GLOBALREF globalref
Packit f574b8
#else
Packit f574b8
#ifdef __GNUC__			/* this added by Sterling Bjorndahl */
Packit f574b8
#define GLOBALREF_IS_MACRO 1
Packit f574b8
#define GLOBALDEF_IS_MACRO 1
Packit f574b8
#include <gnu_hacks.h>		/* defines GLOBALREF and GLOBALDEF for GNUC on VMS */
Packit f574b8
#endif /* __GNUC__ */
Packit f574b8
#endif /* VAXC && !DECC */
Packit f574b8
Packit f574b8
#include <perror.h>
Packit f574b8
#ifndef errno
Packit f574b8
extern int errno;
Packit f574b8
#endif /* !errno */
Packit f574b8
Packit f574b8
#endif /* VMS */
Packit f574b8
Packit f574b8
/*
Packit f574b8
 * On non-VMS machines and for DECC on VMS, the GLOBALDEF and GLOBALREF
Packit f574b8
 * storage types default to normal C storage types.
Packit f574b8
 */
Packit f574b8
#ifndef GLOBALREF
Packit f574b8
#define GLOBALDEF
Packit f574b8
#define GLOBALREF extern
Packit f574b8
#endif /* !GLOBALREF */
Packit f574b8
Packit f574b8
#ifdef __DJGPP__
Packit f574b8
#undef SELECT
Packit f574b8
#define TCP_INCLUDES_DONE
Packit f574b8
#undef  IOCTL
Packit f574b8
#define IOCTL(s,cmd,arg)	ioctlsocket(s,cmd,(char*)(arg))
Packit f574b8
#define DECL_ERRNO
Packit f574b8
#include <errno.h>
Packit f574b8
#include <sys/types.h>
Packit f574b8
#include <io.h>
Packit f574b8
#include <sys/ioctl.h>
Packit f574b8
#include <sys/socket.h>
Packit f574b8
#include <arpa/inet.h>
Packit f574b8
#include <tcp.h>
Packit f574b8
#ifdef word
Packit f574b8
#undef word
Packit f574b8
#endif /* word */
Packit f574b8
#ifdef set_timeout
Packit f574b8
#undef set_timeout
Packit f574b8
#endif /* set_timeout */
Packit f574b8
#define select select_s
Packit f574b8
Packit f574b8
#undef NETWRITE
Packit f574b8
#define NETWRITE write_s
Packit f574b8
#undef NETREAD
Packit f574b8
#define NETREAD read_s
Packit f574b8
#undef NETCLOSE
Packit f574b8
#define NETCLOSE close_s
Packit f574b8
#ifdef UNIX
Packit f574b8
#undef UNIX
Packit f574b8
#endif /* UNIX */
Packit f574b8
#ifdef HAVE_GETTEXT
Packit f574b8
#define gettext gettext__
Packit f574b8
#endif
Packit f574b8
#if !defined(NCURSES) && !defined(USE_SLANG)
Packit f574b8
#define HAVE_CBREAK 1
Packit f574b8
#endif /* !NCURSES && !USE_SLANG */
Packit f574b8
#if defined(USE_SLANG) && !defined(NO_DJ_KEYHANDLER) && defined(HAVE_CONFIG_H)
Packit f574b8
#define DJGPP_KEYHANDLER
Packit f574b8
#endif /* USE_SLANG && !NO_DJ_KEYHANDLER  && HAVE_CONFIG_H */
Packit f574b8
#endif /* DJGPP */
Packit f574b8
Packit f574b8
#ifdef HAVE_UNISTD_H
Packit f574b8
#include <unistd.h>
Packit f574b8
#endif /* HAVE_UNISTD_H */
Packit f574b8
Packit f574b8
#ifdef HAVE_SYS_FILIO_H
Packit f574b8
#include <sys/filio.h>
Packit f574b8
#endif /* HAVE_SYS_FILIO_H */
Packit f574b8
Packit f574b8
#if !defined(HAVE_LSTAT) && !defined(lstat)
Packit f574b8
#define lstat(path,block) stat(path,block)
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#if defined(DECL_ERRNO) && !defined(errno)
Packit f574b8
extern int errno;
Packit f574b8
#endif /* DECL_ERRNO */
Packit f574b8
Packit f574b8
/*
Packit f574b8
Regular BSD unix versions
Packit f574b8
=========================
Packit f574b8
   These are a default unix where not already defined specifically.
Packit f574b8
 */
Packit f574b8
#ifndef INCLUDES_DONE
Packit f574b8
#include <sys/types.h>
Packit f574b8
#ifdef HAVE_STRING_H
Packit f574b8
#include <string.h>
Packit f574b8
#endif /* HAVE_STRING_H */
Packit f574b8
#include <errno.h>		/* independent */
Packit f574b8
#ifdef __MVS__			/* S/390 -- gil -- 1361 */
Packit f574b8
#include <time.h>
Packit f574b8
#endif /* __MVS__ */
Packit f574b8
#ifdef SCO
Packit f574b8
#include <sys/timeb.h>
Packit f574b8
#include <time.h>
Packit f574b8
#endif /* SCO */
Packit f574b8
#if defined(AIX) || defined(SVR4)
Packit f574b8
#include <time.h>
Packit f574b8
#endif /* AIX || SVR4 */
Packit f574b8
#include <sys/time.h>		/* independent */
Packit f574b8
#include <sys/stat.h>
Packit f574b8
#ifndef __MVS__			/* S/390 -- gil -- 1373 */
Packit f574b8
#include <sys/param.h>
Packit f574b8
#endif /* __MVS__ */
Packit f574b8
#include <sys/file.h>		/* For open() etc */
Packit f574b8
Packit f574b8
#if defined(NeXT) || defined(sony_news)
Packit f574b8
#ifndef mode_t
Packit f574b8
typedef unsigned short mode_t;
Packit f574b8
#endif /* !mode_t */
Packit f574b8
Packit f574b8
#endif /* NeXT || sony_news */
Packit f574b8
Packit f574b8
#define INCLUDES_DONE
Packit f574b8
#endif /* Normal includes */
Packit f574b8
Packit f574b8
/* FIXME: this should be autoconf'd */
Packit f574b8
/* Interactive UNIX for i386 and i486 -- Thanks to jeffrey@itm.itm.org */
Packit f574b8
#ifdef ISC
Packit f574b8
#include <net/errno.h>
Packit f574b8
#include <sys/types.h>
Packit f574b8
#include <sys/tty.h>
Packit f574b8
#include <sys/sioctl.h>
Packit f574b8
#include <sys/bsdtypes.h>
Packit f574b8
#ifndef MERGE
Packit f574b8
#define MERGE
Packit f574b8
#include <sys/pty.h>
Packit f574b8
#undef MERGE
Packit f574b8
#else
Packit f574b8
#include <sys/pty.h>
Packit f574b8
#endif /* !MERGE */
Packit f574b8
#ifndef USE_DIRENT
Packit f574b8
#define USE_DIRENT		/* sys V style directory open */
Packit f574b8
#endif /* USE_DIRENT */
Packit f574b8
#include <sys/dirent.h>
Packit f574b8
#endif /* ISC */
Packit f574b8
Packit f574b8
/*	Directory reading stuff - BSD or SYS V
Packit f574b8
*/
Packit f574b8
#ifdef HAVE_CONFIG_H
Packit f574b8
Packit f574b8
# ifdef HAVE_LIMITS_H
Packit f574b8
#  include <limits.h>
Packit f574b8
# endif	/* HAVE_LIMITS_H */
Packit f574b8
# if !defined(MAXINT) && defined(INT_MAX)
Packit f574b8
#  define MAXINT INT_MAX
Packit f574b8
# endif	/* !MAXINT && INT_MAX */
Packit f574b8
Packit f574b8
#else
Packit f574b8
Packit f574b8
#if !(defined(VM) || defined(VMS) || defined(THINK_C) || defined(PCNFS) || defined(_WINDOWS))
Packit f574b8
#define DECL_SYS_ERRLIST 1
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#if defined(VMS)
Packit f574b8
#define socklen_t unsigned
Packit f574b8
#else
Packit f574b8
#define socklen_t int		/* used for default LY_SOCKLEN definition */
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#endif /* !HAVE_CONFIG_H */
Packit f574b8
Packit f574b8
#ifdef HAVE_LIBINTL_H
Packit f574b8
#include <libintl.h>
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#ifdef HAVE_LIBGETTEXT_H
Packit f574b8
#include <libgettext.h>
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#define N_(s) s
Packit f574b8
Packit f574b8
#ifndef HAVE_GETTEXT
Packit f574b8
#define gettext(s) s
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#ifndef NLS_TEXTDOMAIN
Packit f574b8
#define NLS_TEXTDOMAIN "lynx"
Packit f574b8
#endif
Packit f574b8
Packit f574b8
/*
Packit f574b8
Defaults
Packit f574b8
========
Packit f574b8
  INCLUDE FILES FOR TCP
Packit f574b8
 */
Packit f574b8
#ifndef TCP_INCLUDES_DONE
Packit f574b8
#ifndef NO_IOCTL
Packit f574b8
#include <sys/ioctl.h>		/* EJB */
Packit f574b8
#endif /* !NO_IOCTL */
Packit f574b8
#include <sys/socket.h>
Packit f574b8
#include <netinet/in.h>
Packit f574b8
#ifdef HAVE_ARPA_INET_H
Packit f574b8
#include <arpa/inet.h>		/* Must be after netinet/in.h */
Packit f574b8
#endif
Packit f574b8
#include <netdb.h>
Packit f574b8
#endif /* TCP includes */
Packit f574b8
Packit f574b8
typedef unsigned short PortNumber;
Packit f574b8
Packit f574b8
#ifndef S_ISLNK
Packit f574b8
#define S_ISLNK(m)	(((m) & S_IFMT) == S_IFLNK)
Packit f574b8
#endif /* S_ISLNK */
Packit f574b8
Packit f574b8
#ifndef S_ISDIR
Packit f574b8
#define S_ISDIR(m)	(((m) & S_IFMT) == S_IFDIR)
Packit f574b8
#endif /* S_ISDIR */
Packit f574b8
Packit f574b8
#ifndef S_ISREG
Packit f574b8
#define S_ISREG(m)	(((m) & S_IFMT) == S_IFREG)
Packit f574b8
#endif /* S_ISREG */
Packit f574b8
Packit f574b8
#ifndef S_ISUID
Packit f574b8
#define S_ISUID  0004000
Packit f574b8
#endif
Packit f574b8
#ifndef S_ISGID
Packit f574b8
#define S_ISGID  0002000
Packit f574b8
#endif
Packit f574b8
#ifndef S_ISVTX
Packit f574b8
#define S_ISVTX  0001000
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#ifndef S_IRWXU
Packit f574b8
#define S_IRWXU 00700
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#ifndef S_IRUSR
Packit f574b8
#define S_IRUSR 00400
Packit f574b8
#endif
Packit f574b8
#ifndef S_IWUSR
Packit f574b8
#define S_IWUSR 00200
Packit f574b8
#endif
Packit f574b8
#ifndef S_IXUSR
Packit f574b8
#define S_IXUSR 00100
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#ifndef S_IRWXG
Packit f574b8
#define S_IRWXG 00070
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#ifndef S_IRGRP
Packit f574b8
#define S_IRGRP 00040
Packit f574b8
#endif
Packit f574b8
#ifndef S_IWGRP
Packit f574b8
#define S_IWGRP 00020
Packit f574b8
#endif
Packit f574b8
#ifndef S_IXGRP
Packit f574b8
#define S_IXGRP 00010
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#ifndef S_IRWXO
Packit f574b8
#define S_IRWXO 00007
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#ifndef S_IROTH
Packit f574b8
#define S_IROTH 00004
Packit f574b8
#endif
Packit f574b8
#ifndef S_IWOTH
Packit f574b8
#define S_IWOTH 00002
Packit f574b8
#endif
Packit f574b8
#ifndef S_IXOTH
Packit f574b8
#define S_IXOTH 00001
Packit f574b8
#endif
Packit f574b8
Packit f574b8
/*
Packit f574b8
Packit f574b8
ROUGH ESTIMATE OF MAX PATH LENGTH
Packit f574b8
Packit f574b8
*/
Packit f574b8
#ifndef HT_MAX_PATH
Packit f574b8
#ifdef MAXPATHLEN
Packit f574b8
#define HT_MAX_PATH MAXPATHLEN
Packit f574b8
#else
Packit f574b8
#ifdef PATH_MAX
Packit f574b8
#define HT_MAX_PATH PATH_MAX
Packit f574b8
#else
Packit f574b8
#define HT_MAX_PATH 1024	/* Any better ideas? */
Packit f574b8
#endif
Packit f574b8
#endif
Packit f574b8
#endif /* HT_MAX_PATH */
Packit f574b8
Packit f574b8
#if HT_MAX_PATH < 256
Packit f574b8
#undef HT_MAX_PATH
Packit f574b8
#define HT_MAX_PATH 256
Packit f574b8
#endif
Packit f574b8
Packit f574b8
/*
Packit f574b8
  MACROS FOR MANIPULATING MASKS FOR SELECT()
Packit f574b8
 */
Packit f574b8
#ifdef SELECT
Packit f574b8
#ifndef FD_SET
Packit f574b8
#ifndef TYPE_FD_SET
Packit f574b8
#define TYPE_FD_SET unsigned
Packit f574b8
typedef TYPE_FD_SET fd_set;
Packit f574b8
#endif /* !TYPE_FD_SET */
Packit f574b8
Packit f574b8
#define FD_SET(fd,pmask)   (*(pmask)) |=  (1 << (fd))
Packit f574b8
#define FD_CLR(fd,pmask)   (*(pmask)) &= ~(1 << (fd))
Packit f574b8
#define FD_ZERO(pmask)     (*(pmask)) = 0
Packit f574b8
#define FD_ISSET(fd,pmask) (*(pmask) & (1 << (fd)))
Packit f574b8
#endif /* !FD_SET */
Packit f574b8
#endif /* SELECT */
Packit f574b8
Packit f574b8
/*
Packit f574b8
 * Macro for setting errno - only define this if you really can do it.
Packit f574b8
 */
Packit f574b8
#if defined(CAN_SET_ERRNO) || (!defined(errno) && (!defined(VMS) || defined(UCX)))
Packit f574b8
#define set_errno(value) errno = value
Packit f574b8
#else
Packit f574b8
#define set_errno(value)	/* we do not know how */
Packit f574b8
#endif
Packit f574b8
Packit f574b8
/*
Packit f574b8
 * IPv6 support
Packit f574b8
 */
Packit f574b8
#if defined(HAVE_GETADDRINFO) && defined(ENABLE_IPV6)
Packit f574b8
#if defined(HAVE_GAI_STRERROR)
Packit f574b8
#define INET6
Packit f574b8
#elif defined(_WINDOWS)
Packit f574b8
#define INET6
Packit f574b8
#ifndef WIN_EX
Packit f574b8
#error Define "WIN_EX" in your makefile.
Packit f574b8
#endif
Packit f574b8
#ifndef _MSC_VER		/* MSVC has this inlined in <ws2tcpip.h> */
Packit f574b8
#undef  gai_strerror
Packit f574b8
#define gai_strerror(err) w32_strerror (err)
Packit f574b8
#endif
Packit f574b8
#endif
Packit f574b8
#endif /* HAVE_GETADDRINFO && ENABLE_IPV6 */
Packit f574b8
Packit f574b8
typedef union {
Packit f574b8
    struct sockaddr_in soc_in;
Packit f574b8
    struct sockaddr soc_address;
Packit f574b8
#ifdef INET6
Packit f574b8
    struct sockaddr_storage soc_storage;
Packit f574b8
#endif
Packit f574b8
} LY_SOCKADDR;
Packit f574b8
Packit f574b8
#ifdef INET6
Packit f574b8
typedef struct sockaddr_storage SockA;
Packit f574b8
Packit f574b8
#define SOCKADDR_OF(param) (&((param).soc_address))
Packit f574b8
Packit f574b8
#ifndef SA_LEN
Packit f574b8
#define SA_LEN(x) (((x)->sa_family == AF_INET6) \
Packit f574b8
		   ? sizeof(struct sockaddr_in6) \
Packit f574b8
		   : (((x)->sa_family == AF_INET) \
Packit f574b8
		      ? sizeof(struct sockaddr_in) \
Packit f574b8
		      : sizeof(struct sockaddr)))	/* AF_UNSPEC? */
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#ifdef SIN6_LEN
Packit f574b8
#define SOCKADDR_LEN(param) (SOCKADDR_OF(param)->sa_len)
Packit f574b8
#else
Packit f574b8
#define SOCKADDR_LEN(param) (socklen_t) SA_LEN(SOCKADDR_OF(param))
Packit f574b8
#endif /* SIN6_LEN */
Packit f574b8
#else
Packit f574b8
typedef struct sockaddr_in SockA;
Packit f574b8
Packit f574b8
#define SOCKADDR_OF(param) ((struct sockaddr *)&(param))
Packit f574b8
#define SOCKADDR_LEN(param) sizeof(param)
Packit f574b8
#endif /* INET6 */
Packit f574b8
Packit f574b8
#ifndef MAXHOSTNAMELEN
Packit f574b8
#define MAXHOSTNAMELEN 128	/* Max label is 63. Should handle 2 of those */
Packit f574b8
#endif /* MAXHOSTNAMELEN */
Packit f574b8
Packit f574b8
#endif /* TCP_H */