diff options
Diffstat (limited to 'os2/tcpip.h')
-rw-r--r-- | os2/tcpip.h | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/os2/tcpip.h b/os2/tcpip.h new file mode 100644 index 0000000..4f3e58f --- /dev/null +++ b/os2/tcpip.h @@ -0,0 +1,131 @@ +/**************************************************************** + * + * TCPIP.H - Portable TCP/IP header file + * + * TCP/IP on OS/2 is an add-on and thus is not fully integrated + * with the operating system. To ensure portability, follow + * these rules: + * + * * Always call SockInit() at the beginning of your program + * and check that it returns TRUE. + * + * * Use SockSend() & SockRecv() instead of read(), write(), + * send(), or recv() when working with sockets. + * + * * Use SockClose() instead of close() with sockets. + * + * * Use SOCK_ERRNO when using functions that use or return + * sockets, such as SockSend() or accept(). + * + * * Use HOST_ERRNO when using gethostbyname() or gethostbyaddr() + * functions. + * + * * As far as I can tell, getservbyname() and related functions + * never set any error variable. + * + * * Use SockStrError() & HostStrError() to convert SOCK_ERRNO + * and HOST_ERRNO to error strings. + * + * * In .MAK files, include $(TCPIP_MAK) & use $(TCPIPLIB) + * when linking applications using TCP/IP. + * + ****************************************************************/ + +#if !defined( IN_TCPIP_H ) +#define IN_TCPIP_H + +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/socket.h> +#include <sys/ioctl.h> +#include <netinet/in.h> +#include <netdb.h> +#include <errno.h> + +#if defined( TCPIP_IBM ) +/* Here comes some ugly stuff: The watcom compiler and the IBM TCPIP + * toolkit do not work together very well. The return codes for the + * socket calls are not integrated into the usual error codes, there + * are separate values instead. This results in a crash for two values. + * Since these values are not needed for socket access as far as I can + * see, I will save those values and redefine them after including + * nerrno.h (types.h will include nerrno.h, so this is needed here). + */ +# ifdef __WATCOMC__ + /* First check the numeric values */ +# if ENAMETOOLONG != 35 +# error "ENAMETOOLONG: value unknown" +# endif +# if ENOTEMPTY != 39 +# error "ENOTEMPTY: value unknown" +# endif +# undef ENAMETOOLONG +# undef ENOTEMPTY +# include <nerrno.h> +# undef ENAMETOOLONG +# undef ENOTEMPTY +# define ENAMETOOLONG 35 +# define ENOTEMPTY 39 +# endif +# include <types.h> +# if !defined( TCPIP_IBM_NOHIDE ) +# define send IbmSockSend +# define recv IbmSockRecv +# endif +#endif + +#if defined( TCPIP_IBM ) +# define BSD_SELECT +# include <sys/select.h> +# include <sys/time.h> +# include <nerrno.h> +# include <utils.h> +# if defined( MICROSOFT ) +# define SOCK_ERRNO (tcperrno()) +# else +# define SOCK_ERRNO (sock_errno()) +# endif +# define HOST_ERRNO (h_errno) +# define SockClose(S) soclose(S) +# define SockInit() (!sock_init()) +# define SockSend IbmSockSend +# define SockRecv IbmSockRecv + +const char *HostStrError(int HostErrno); +const char *SockStrError(int SockErrno); + +int IbmSockSend (int Socket, const void *Buffer, int Len, int Flags); +int IbmSockRecv (int Socket, const void *Buffer, int Len, int Flags); + +#if !defined( h_errno ) +extern int h_errno; /* IBM forgot to declare this in current header files */ +#endif + +#elif defined( __unix ) +# if defined( sgi ) /* SGI incorrectly defines FD_ZERO in sys/select.h */ +# include <bstring.h> +# endif +# if defined( sunos ) +extern int select(int, fd_set *, fd_set *, fd_set *, struct timeval *); +# else +# include <sys/select.h> +# endif +# include <sys/time.h> +# include <errno.h> +# include <arpa/inet.h> +# define SOCK_ERRNO errno +# define HOST_ERRNO h_errno +# define SockClose(S) close(S) +# define SockInit() TRUE +# define SockSend send +# define SockRecv recv +# define SockStrError(E) strerror(E) + +const char *HostStrError( int HostErrno ); + +#else +# error Undefined version of TCP/IP specified + +#endif + +#endif |