1/****************************************************************
2 *
3 * TCPIP.H - Portable TCP/IP header file
4 *
5 * TCP/IP on OS/2 is an add-on and thus is not fully integrated
6 * with the operating system. To ensure portability, follow
7 * these rules:
8 *
9 *  * Always call SockInit() at the beginning of your program
10 *    and check that it returns TRUE.
11 *
12 *  * Use SockSend() & SockRecv() instead of read(), write(),
13 *    send(), or recv() when working with sockets.
14 *
15 *  * Use SockClose() instead of close() with sockets.
16 *
17 *  * Use SOCK_ERRNO when using functions that use or return
18 *    sockets, such as SockSend() or accept().
19 *
20 *  * Use HOST_ERRNO when using gethostbyname() or gethostbyaddr()
21 *    functions.
22 *
23 *  * As far as I can tell, getservbyname() and related functions
24 *    never set any error variable.
25 *
26 *  * Use SockStrError() & HostStrError() to convert SOCK_ERRNO
27 *    and HOST_ERRNO to error strings.
28 *
29 *  * In .MAK files, include $(TCPIP_MAK) & use $(TCPIPLIB)
30 *    when linking applications using TCP/IP.
31 *
32 ****************************************************************/
33
34#if !defined( IN_TCPIP_H )
35#define IN_TCPIP_H
36
37#include	<sys/types.h>
38#include	<sys/stat.h>
39#include	<sys/socket.h>
40#include	<sys/ioctl.h>
41#include	<netinet/in.h>
42#include	<netdb.h>
43#include	<errno.h>
44
45#if defined( TCPIP_IBM )
46/* Here comes some ugly stuff: The watcom compiler and the IBM TCPIP
47 * toolkit do not work together very well. The return codes for the
48 * socket calls are not integrated into the usual error codes, there
49 * are separate values instead. This results in a crash for two values.
50 * Since these values are not needed for socket access as far as I can
51 * see, I will save those values and redefine them after including
52 * nerrno.h (types.h will include nerrno.h, so this is needed here).
53 */
54#       ifdef __WATCOMC__
55                /* First check the numeric values */
56#               if ENAMETOOLONG != 35
57#                       error "ENAMETOOLONG: value unknown"
58#               endif
59#               if ENOTEMPTY != 39
60#                       error "ENOTEMPTY: value unknown"
61#               endif
62#               undef  ENAMETOOLONG
63#               undef  ENOTEMPTY
64#               include <nerrno.h>
65#               undef  ENAMETOOLONG
66#               undef  ENOTEMPTY
67#               define ENAMETOOLONG     35
68#               define ENOTEMPTY        39
69#       endif
70#	include	<types.h>
71#	if !defined( TCPIP_IBM_NOHIDE )
72#		define send IbmSockSend
73#		define recv IbmSockRecv
74#	endif
75#endif
76
77#if defined( TCPIP_IBM )
78#	define	BSD_SELECT
79#	include	<sys/select.h>
80#	include	<sys/time.h>
81#	include <nerrno.h>
82#	include <utils.h>
83#	if defined( MICROSOFT )
84#		define	SOCK_ERRNO		(tcperrno())
85#	else
86#		define	SOCK_ERRNO		(sock_errno())
87#	endif
88#	define	HOST_ERRNO		(h_errno)
89#	define	SockClose(S)	soclose(S)
90#	define	SockInit()		(!sock_init())
91#	define	SockSend		IbmSockSend
92#	define	SockRecv		IbmSockRecv
93
94const char *HostStrError(int HostErrno);
95const char *SockStrError(int SockErrno);
96
97int IbmSockSend (int Socket, const void *Buffer, int Len, int Flags);
98int IbmSockRecv (int Socket, const void *Buffer, int Len, int Flags);
99
100#if !defined( h_errno )
101extern int h_errno; /* IBM forgot to declare this in current header files */
102#endif
103
104#elif defined( __unix )
105#	if defined( sgi ) /* SGI incorrectly defines FD_ZERO in sys/select.h */
106#		include <bstring.h>
107#	endif
108#	if defined( sunos )
109extern int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
110#	else
111#		include <sys/select.h>
112#	endif
113#	include <sys/time.h>
114#	include <errno.h>
115#	include <arpa/inet.h>
116#	define	SOCK_ERRNO		errno
117#	define	HOST_ERRNO		h_errno
118#	define	SockClose(S)	close(S)
119#	define	SockInit()		TRUE
120#	define	SockSend		send
121#	define	SockRecv		recv
122#	define	SockStrError(E) strerror(E)
123
124const char *HostStrError( int HostErrno );
125
126#else
127#	error Undefined version of TCP/IP specified
128
129#endif
130
131#endif
132