/* * @(#) $(JCGO)/native/jcgonet.h -- * a part of the JCGO native layer library (network I/O defs). ** * Project: JCGO (http://www.ivmaisoft.com/jcgo/) * Copyright (C) 2001-2009 Ivan Maidanski * All rights reserved. */ /* * Used control macros: JCGO_EXEC, JCGO_OLDWSOCK, JCGO_OS2, JCGO_UNIX, * JCGO_WIN32. */ /* * This 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; either version 2, or (at your option) * any later version. ** * This software 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 (GPL) for more details. ** * Linking this library statically or dynamically with other modules is * making a combined work based on this library. Thus, the terms and * conditions of the GNU General Public License cover the whole * combination. ** * As a special exception, the copyright holders of this library give you * permission to link this library with independent modules to produce an * executable, regardless of the license terms of these independent * modules, and to copy and distribute the resulting executable under * terms of your choice, provided that you also meet, for each linked * independent module, the terms and conditions of the license of that * module. An independent module is a module which is not derived from * or based on this library. If you modify this library, you may extend * this exception to your version of the library, but you are not * obligated to do so. If you do not wish to do so, delete this * exception statement from your version. */ #ifdef JCGO_VER /* #include */ #ifdef JCGO_WIN32 #ifdef JCGO_UNIX #define STRICT #endif #ifndef WIN32 #define WIN32 #endif #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN 1 #endif #ifndef _WINDOWS_H #include #endif #ifndef __CYGWIN__ #ifndef _SYS_TYPES_H #include #endif #endif #ifdef JCGO_OLDWSOCK #ifndef _WINSOCK_H #include #endif #else /* JCGO_OLDWSOCK */ #ifndef _WINSOCK2_H #include #endif #ifndef _WS2TCPIP_H #include #endif #endif /* ! JCGO_OLDWSOCK */ /* #include */ /* int WSACleanup(void); */ /* int WSAGetLastError(void); */ /* int WSAStartup(unsigned short, WSADATA *); */ /* SOCKET accept(SOCKET, struct sockaddr *, int *); */ /* int bind(SOCKET, const struct sockaddr *, int); */ /* int closesocket(SOCKET); */ /* int connect(SOCKET, const struct sockaddr *, int); */ /* int gethostname(char *, int); */ /* int getsockname(SOCKET, struct sockaddr *, int *); */ /* int getsockopt(SOCKET, int, int, char *, int *); */ /* unsigned short htons(unsigned short); */ /* int ioctlsocket(SOCKET, long, unsigned long *); */ /* int listen(SOCKET, int); */ /* unsigned short ntohs(unsigned short); */ /* int recvfrom(SOCKET, char *, int, int, struct sockaddr *, int *); */ /* int select(int, fd_set *, fd_set *, fd_set *, const struct timeval *); */ /* int sendto(SOCKET, const char *, int, int, const struct sockaddr *, int); */ /* int setsockopt(SOCKET, int, int, const char *, int); */ /* int shutdown(SOCKET, int); */ /* SOCKET socket(int, int, int); */ #ifdef JCGO_UNIX #define select _unix_select #ifndef _STRUCT_TIMEVAL #define _STRUCT_TIMEVAL 1 #endif #ifndef _TIMEVAL_DEFINED #define _TIMEVAL_DEFINED 1 #endif #ifndef _TIMEVAL #define _TIMEVAL 1 #endif #ifndef _SYS_TIME_H #include #endif #ifndef FD_SET #ifndef _SYS_SELECT_H #include #endif #endif #ifndef _UNISTD_H #include #endif #undef select #endif /* JCGO_UNIX */ #ifndef _SYS_TYPES_H #include #endif #define JCGO_SOCKGETERR_NOTERRNO #define JCGO_SOCK_GETERROR(x) WSAGetLastError() #ifndef JCGO_SOCKINIT_VERWORD #ifdef JCGO_OLDWSOCK #define JCGO_SOCKINIT_VERWORD 0x101 #else #define JCGO_SOCKINIT_VERWORD 0x202 /* minor:major */ #ifndef JCGO_SOCKINIT_REQMAJORVER #define JCGO_SOCKINIT_REQMAJORVER 2 #endif #endif #endif /* #include */ /* int atexit(void (*)(void)); */ #ifdef JCGO_SOCKINIT_REQMAJORVER #define JCGO_SOCK_INIT(pdata) (WSAStartup(JCGO_SOCKINIT_VERWORD, pdata) ? -1 : ((pdata)->wVersion & 0xff) < JCGO_SOCKINIT_REQMAJORVER ? (WSACleanup(), -1) : (atexit(jcgo_sockCleanup), 0)) #else #define JCGO_SOCK_INIT(pdata) (WSAStartup(JCGO_SOCKINIT_VERWORD, pdata) ? -1 : (atexit(jcgo_sockCleanup), 0)) #endif #define JCGO_SOCKINIT_T WSADATA #define JCGO_SOCK_CLEANUP(x) WSACleanup() #define JCGO_SOCK_CLOSE(fd, perrcode) (closesocket(fd) != -1 ? 0 : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #define JCGO_SOCK_IOCTL(fd, cmd, val, perrcode) (ioctlsocket(fd, cmd, (void *)&(val)) != -1 ? 0 : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #define JCGO_SOCK_SELECT(nfds, readfds, writefds, exceptfds, ptv, perrcode) ((*(perrcode) = select(nfds, readfds, writefds, exceptfds, ptv)) != -1 ? *(perrcode) : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #ifndef JCGO_SOCKFIONBIO_T #define JCGO_SOCKFIONBIO_T unsigned long #endif #else /* JCGO_WIN32 */ #ifndef _ERRNO_H #include /* int errno; */ #endif #ifndef EPROTONOSUPPORT #ifndef _INC_STDLIB #define _INC_STDLIB 1 #endif #ifndef JCGO_OS2 #ifndef _TCP_H #include "tcp.h" #endif #endif #endif #ifdef JCGO_UNIX #ifndef BSD_COMP #define BSD_COMP 1 #endif #ifndef _SYS_TIME_H #include /* int select(int, fd_set *, fd_set *, fd_set *, struct timeval *); */ #endif #ifndef FD_SET #ifndef _SYS_SELECT_H #include /* int select(int, fd_set *, fd_set *, fd_set *, struct timeval *); */ #endif #endif #ifndef _UNISTD_H #include /* int close(int); */ /* int gethostname(char *, size_t); */ #endif #else /* JCGO_UNIX */ #ifdef JCGO_OS2 #ifndef _ARPA_INET_H #include /* unsigned short htons(unsigned short); */ /* unsigned short ntohs(unsigned short); */ #endif #endif #endif /* ! JCGO_UNIX */ #ifndef _SYS_TYPES_H #include #endif #ifndef _TIME_H #include #endif #ifndef _STRING_H #include /* char *strerror(int); */ #endif #ifndef _SYS_SOCKET_H #include /* int accept(int, struct sockaddr *, unsigned *); */ /* int bind(int, const struct sockaddr *, unsigned); */ /* int connect(int, const struct sockaddr *, unsigned); */ /* int getsockname(int, struct sockaddr *, unsigned *); */ /* int getsockopt(int, int, int, void *, unsigned *); */ /* int listen(int, int); */ /* ssize_t recvfrom(int, void *, size_t, int, struct sockaddr *, unsigned *); */ /* ssize_t sendto(int, const void *, size_t, int, const struct sockaddr *, unsigned); */ /* int setsockopt(int, int, int, const void *, unsigned); */ /* int shutdown(int, int); */ /* int socket(int, int, int); */ #endif #ifndef _SYS_IOCTL_H #include /* int ioctl(int, int, ...); */ #endif #ifndef _NETINET_IN_H #include /* unsigned short htons(unsigned short); */ /* unsigned short ntohs(unsigned short); */ #endif #ifndef TCP_NODELAY #ifndef _NETINET_TCP_H #include #endif #endif #ifndef _NETDB_H #include #endif #ifndef ESOCKTNOSUPPORT #ifdef JCGO_OS2 #ifndef _NERRNO_H #include #endif #endif #endif #ifdef JCGO_UNIX #ifndef WATTCP_VER #define JCGO_SOCK_GETERROR(x) (errno + 0) #define JCGO_SOCK_IOCTL(fd, cmd, val, perrcode) (ioctl(fd, cmd, (void *)&(val)) != -1 ? 0 : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #define JCGO_SOCK_SELECT(nfds, readfds, writefds, exceptfds, ptv, perrcode) ((*(perrcode) = select(nfds, readfds, writefds, exceptfds, ptv)) != -1 ? *(perrcode) : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #ifdef closesocket #define JCGO_SOCK_CLOSE(fd, perrcode) (closesocket(fd) != -1 ? 0 : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #else /* closesocket */ #ifndef _FCNTL_H #include #endif #define JCGO_SOCK_CLOSE(fd, perrcode) (close(fd) != -1 ? 0 : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #ifndef JCGO_SOCK_SETCLOEXEC #ifdef JCGO_EXEC #ifndef JCGO_FD_SETCLOEXEC #ifdef FD_CLOEXEC #ifdef F_GETFD #ifdef F_SETFD /* #include */ /* int fcntl(int, int, ...); */ #define JCGO_FD_SETCLOEXEC(fd) ((fd) != -1 ? fcntl(fd, F_SETFD, fcntl(fd, F_GETFD, 0) | FD_CLOEXEC) : -1) #endif #endif #endif #endif #endif #ifdef JCGO_FD_SETCLOEXEC #define JCGO_SOCK_SETCLOEXEC(fd) JCGO_FD_SETCLOEXEC(fd) #endif #endif #endif /* ! closesocket */ #endif /* ! WATTCP_VER */ #else /* JCGO_UNIX */ #ifdef JCGO_OS2 #ifndef _SYS_TIME_H #include #endif #ifndef _UNISTD_H #include /* int gethostname(char *, size_t); */ /* int soclose(int); */ /* int select(int, fd_set *, fd_set *, fd_set *, struct timeval *); */ #endif /* #include */ /* int sock_errno(void); */ /* int sock_init(void); */ #ifdef SOCESOCKTNOSUPPORT #define JCGO_SOCKGETERR_NOTERRNO #define JCGO_SOCK_GETERROR(x) sock_errno() #else #define JCGO_SOCK_GETERROR(x) (errno + 0) #endif #define JCGO_SOCKINIT_T int #define JCGO_SOCK_INIT(pdata) ((*(pdata) = sock_init()) != 0 ? -1 : 0) #define JCGO_SOCK_CLOSE(fd, perrcode) (soclose(fd) != -1 ? 0 : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #define JCGO_SOCK_IOCTL(fd, cmd, val, perrcode) (ioctl(fd, cmd, (void *)&(val), sizeof(val)) != -1 ? 0 : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #define JCGO_SOCK_SELECT(nfds, readfds, writefds, exceptfds, ptv, perrcode) ((*(perrcode) = select(nfds, readfds, writefds, exceptfds, ptv)) != -1 ? *(perrcode) : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #else /* JCGO_OS2 */ #ifndef _SYS_SELECT_H #include #endif #endif /* ! JCGO_OS2 */ #endif /* ! JCGO_UNIX */ #ifndef JCGO_SOCK_GETERROR /* #include */ /* int closesocket(int); */ /* int ioctlsocket(int, long, char *); */ /* #include */ /* int _multicast_on; */ /* int select_s(int, fd_set *, fd_set *, fd_set *, struct timeval *); */ /* void sock_exit(void); */ /* int sock_init(void); */ /* #include */ /* int atexit(void (*)(void)); */ #define JCGO_SOCKGETERR_NOTERRNO #define JCGO_SOCK_GETERROR(x) (errno + 0) #define JCGO_SOCKINIT_T int #define JCGO_SOCK_INIT(pdata) ((*(pdata) = (_multicast_on = 1, sock_init())) != 0 ? -1 : (atexit(jcgo_sockCleanup), 0)) #define JCGO_SOCK_CLEANUP(x) sock_exit() #define JCGO_SOCK_CLOSE(fd, perrcode) (closesocket(fd) != -1 ? 0 : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #define JCGO_SOCK_IOCTL(fd, cmd, val, perrcode) (ioctlsocket(fd, cmd, (void *)&(val)) != -1 ? 0 : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #define JCGO_SOCK_SELECT(nfds, readfds, writefds, exceptfds, ptv, perrcode) ((*(perrcode) = select_s(nfds, readfds, writefds, exceptfds, ptv)) != -1 ? *(perrcode) : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #endif /* ! JCGO_SOCK_GETERROR */ #ifndef JCGO_SOCKFIONBIO_T #define JCGO_SOCKFIONBIO_T unsigned #endif #endif /* ! JCGO_WIN32 */ #define JCGO_SOCKCALL_BEGIN(pJniEnv) { #define JCGO_SOCKCALL_END(pJniEnv) } #ifndef JCGO_SOCKHOSTNAME_MAXSIZE #define JCGO_SOCKHOSTNAME_MAXSIZE 0x100 #endif #ifndef JCGO_SOCKFIONREAD_T #define JCGO_SOCKFIONREAD_T JCGO_SOCKFIONBIO_T /* or size_t */ #endif #ifndef JCGO_SOCK_SETCLOEXEC #define JCGO_SOCK_SETCLOEXEC(fd) 0 #endif #ifdef _UNISTD_NETDB_NO_GETHOSTNAME #define JCGO_SOCK_GETHOSTNAME(name, len) -1 #else #define JCGO_SOCK_GETHOSTNAME(name, len) gethostname(name, len) #endif #define JCGO_SOCK_SOCKET(family, type, proto, perrcode) ((*(perrcode) = (int)socket(family, type, proto)) != -1 ? *(perrcode) : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #define JCGO_SOCK_ACCEPT(fd, saddr, perrcode) (*(perrcode) = (int)sizeof(saddr), (*(perrcode) = (int)accept(fd, (void *)&(saddr), (void *)(perrcode))) != -1 ? *(perrcode) : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #define JCGO_SOCK_BIND(fd, psaddr, saddrsize, perrcode) (bind(fd, (struct sockaddr *)(psaddr), saddrsize) != -1 ? 0 : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #define JCGO_SOCK_CONNECT(fd, psaddr, saddrsize, perrcode) (connect(fd, (struct sockaddr *)(psaddr), saddrsize) != -1 ? 0 : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #define JCGO_SOCK_GETSOCKNAME(fd, saddr, perrcode) (*(perrcode) = (int)sizeof(saddr), getsockname(fd, (void *)&(saddr), (void *)(perrcode)) != -1 ? 0 : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #define JCGO_SOCK_LISTEN(fd, backlog, perrcode) (listen(fd, backlog) != -1 ? 0 : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #define JCGO_SOCK_SHUTDOWN(fd, howto, perrcode) (shutdown(fd, howto) != -1 ? 0 : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #define JCGO_SOCK_RECVFROM(fd, buf, len, flags, psaddr, saddrsize, perrcode) (*(perrcode) = (int)(saddrsize), (*(perrcode) = (int)recvfrom(fd, buf, len, flags, (struct sockaddr *)(psaddr), (void *)(perrcode))) != -1 ? *(perrcode) : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #define JCGO_SOCK_SENDTO(fd, buf, len, flags, psaddr, saddrsize, perrcode) ((*(perrcode) = (int)sendto(fd, buf, len, flags, (struct sockaddr *)(psaddr), saddrsize)) != -1 ? *(perrcode) : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #define JCGO_SOCK_GETSOCKOPT(fd, level, optid, pval, valsize, perrcode) (*(perrcode) = (int)(valsize), getsockopt(fd, level, optid, (void *)(pval), (void *)(perrcode)) != -1 ? 0 : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #define JCGO_SOCK_SETSOCKOPT(fd, level, optid, pval, valsize, perrcode) (setsockopt(fd, level, optid, (void *)(pval), valsize) != -1 ? 0 : (*(perrcode) = JCGO_SOCK_GETERROR(0), -1)) #ifndef JCGO_SOCKLLINGER_T #define JCGO_SOCKLLINGER_T unsigned short #endif #ifndef JCGO_SOCKTVSEC_T #ifdef JCGO_WIN32 #define JCGO_SOCKTVSEC_T long #else #define JCGO_SOCKTVSEC_T time_t #endif #endif #ifndef JCGO_TVSUSECONDS_T #ifdef _SUSECONDS_T #define JCGO_TVSUSECONDS_T suseconds_t #else #ifdef _SUSECONDS_T_DECLARED #define JCGO_TVSUSECONDS_T suseconds_t #else #ifdef _SUSECONDS_T_DEFINED #define JCGO_TVSUSECONDS_T suseconds_t #else #ifdef __suseconds_t_defined #define JCGO_TVSUSECONDS_T suseconds_t #else #define JCGO_TVSUSECONDS_T long #endif #endif #endif #endif #endif #ifndef SOCESOCKTNOSUPPORT #ifdef WSAESOCKTNOSUPPORT #define SOCEACCES WSAEACCES #define SOCEADDRINUSE WSAEADDRINUSE #define SOCEADDRNOTAVAIL WSAEADDRNOTAVAIL #define SOCEAFNOSUPPORT WSAEAFNOSUPPORT #define SOCEALREADY WSAEALREADY #define SOCEBADF WSAEBADF #define SOCECONNABORTED WSAECONNABORTED #define SOCECONNREFUSED WSAECONNREFUSED #define SOCECONNRESET WSAECONNRESET #define SOCEDESTADDRREQ WSAEDESTADDRREQ #define SOCEHOSTDOWN WSAEHOSTDOWN #define SOCEHOSTUNREACH WSAEHOSTUNREACH #define SOCEINPROGRESS WSAEINPROGRESS #define SOCEINTR WSAEINTR #define SOCEINVAL WSAEINVAL #define SOCEISCONN WSAEISCONN #define SOCEMFILE WSAEMFILE #define SOCEMSGSIZE WSAEMSGSIZE #define SOCENETDOWN WSAENETDOWN #define SOCENETRESET WSAENETRESET #define SOCENETUNREACH WSAENETUNREACH #define SOCENOBUFS WSAENOBUFS #define SOCENOPROTOOPT WSAENOPROTOOPT #define SOCENOTCONN WSAENOTCONN #define SOCENOTSOCK WSAENOTSOCK #define SOCEOPNOTSUPP WSAEOPNOTSUPP #define SOCEPFNOSUPPORT WSAEPFNOSUPPORT #define SOCEPROTONOSUPPORT WSAEPROTONOSUPPORT #define SOCEPROTOTYPE WSAEPROTOTYPE #define SOCESHUTDOWN WSAESHUTDOWN #define SOCESOCKTNOSUPPORT WSAESOCKTNOSUPPORT #define SOCETIMEDOUT WSAETIMEDOUT #define SOCETOOMANYREFS WSAETOOMANYREFS #define SOCEWOULDBLOCK WSAEWOULDBLOCK #else /* WSAESOCKTNOSUPPORT */ #ifndef EACCES #define EACCES 12345 #endif #ifndef EAGAIN #define EAGAIN 12346 #endif #ifndef EBADF #define EBADF 12347 #endif #ifndef EINTR #define EINTR 12350 #endif #ifndef EINVAL #define EINVAL 12351 #endif #ifndef EMFILE #define EMFILE 12352 #endif #ifndef EADDRINUSE #define EADDRINUSE 12456 #endif #ifndef EADDRNOTAVAIL #define EADDRNOTAVAIL 12457 #endif #ifndef EAFNOSUPPORT #define EAFNOSUPPORT 12458 #endif #ifndef EALREADY #define EALREADY 12459 #endif #ifndef ECONNABORTED #define ECONNABORTED 12460 #endif #ifndef ECONNREFUSED #define ECONNREFUSED 12461 #endif #ifndef ECONNRESET #define ECONNRESET 12462 #endif #ifndef EDESTADDRREQ #define EDESTADDRREQ 12463 #endif #ifndef EHOSTDOWN #define EHOSTDOWN 12464 #endif #ifndef EHOSTUNREACH #define EHOSTUNREACH 12465 #endif #ifndef EINPROGRESS #define EINPROGRESS 12466 #endif #ifndef EISCONN #define EISCONN 12467 #endif #ifndef EMSGSIZE #define EMSGSIZE 12468 #endif #ifndef ENETDOWN #define ENETDOWN 12469 #endif #ifndef ENETRESET #define ENETRESET 12470 #endif #ifndef ENETUNREACH #define ENETUNREACH 12471 #endif #ifndef ENOBUFS #define ENOBUFS 12472 #endif #ifndef ENOPROTOOPT #define ENOPROTOOPT 12473 #endif #ifndef ENOTCONN #define ENOTCONN 12474 #endif #ifndef ENOTSOCK #define ENOTSOCK 12475 #endif #ifndef EOPNOTSUPP #define EOPNOTSUPP 12476 #endif #ifndef EPFNOSUPPORT #define EPFNOSUPPORT 12477 #endif #ifndef EPROTONOSUPPORT #define EPROTONOSUPPORT 12478 #endif #ifndef EPROTOTYPE #define EPROTOTYPE 12479 #endif #ifndef ESHUTDOWN #define ESHUTDOWN 12480 #endif #ifndef ESOCKTNOSUPPORT #define ESOCKTNOSUPPORT 12481 #endif #ifndef ETIMEDOUT #define ETIMEDOUT 12482 #endif #ifndef ETOOMANYREFS #define ETOOMANYREFS 12483 #endif #ifndef EWOULDBLOCK #define EWOULDBLOCK EAGAIN #endif #define SOCEACCES EACCES #define SOCEADDRINUSE EADDRINUSE #define SOCEADDRNOTAVAIL EADDRNOTAVAIL #define SOCEAFNOSUPPORT EAFNOSUPPORT #define SOCEALREADY EALREADY #define SOCEBADF EBADF #define SOCECONNABORTED ECONNABORTED #define SOCECONNREFUSED ECONNREFUSED #define SOCECONNRESET ECONNRESET #define SOCEDESTADDRREQ EDESTADDRREQ #define SOCEHOSTDOWN EHOSTDOWN #define SOCEHOSTUNREACH EHOSTUNREACH #define SOCEINPROGRESS EINPROGRESS #define SOCEINTR EINTR #define SOCEINVAL EINVAL #define SOCEISCONN EISCONN #define SOCEMFILE EMFILE #define SOCEMSGSIZE EMSGSIZE #define SOCENETDOWN ENETDOWN #define SOCENETRESET ENETRESET #define SOCENETUNREACH ENETUNREACH #define SOCENOBUFS ENOBUFS #define SOCENOPROTOOPT ENOPROTOOPT #define SOCENOTCONN ENOTCONN #define SOCENOTSOCK ENOTSOCK #define SOCEOPNOTSUPP EOPNOTSUPP #define SOCEPFNOSUPPORT EPFNOSUPPORT #define SOCEPROTONOSUPPORT EPROTONOSUPPORT #define SOCEPROTOTYPE EPROTOTYPE #define SOCESHUTDOWN ESHUTDOWN #define SOCESOCKTNOSUPPORT ESOCKTNOSUPPORT #define SOCETIMEDOUT ETIMEDOUT #define SOCETOOMANYREFS ETOOMANYREFS #define SOCEWOULDBLOCK EWOULDBLOCK #endif /* ! WSAESOCKTNOSUPPORT */ #endif /* ! SOCESOCKTNOSUPPORT */ #ifndef AF_UNSPEC #define AF_UNSPEC 0 #endif #ifndef AF_INET #define AF_INET 2 #endif #ifndef INADDR_ANY #define INADDR_ANY ((unsigned)0) #endif #ifndef SOCK_STREAM #define SOCK_STREAM 1 #endif #ifndef SOCK_DGRAM #define SOCK_DGRAM 2 #endif #ifndef IPPROTO_IP #define IPPROTO_IP 0 #endif #ifndef IPPROTO_TCP #define IPPROTO_TCP 6 #endif #ifndef IP_TOS #ifdef JCGO_OLDWSOCK #define IP_TOS 8 #else #define IP_TOS 3 /* or 1 */ #endif #endif #ifndef IP_MULTICAST_IF #ifdef JCGO_OLDWSOCK #define IP_MULTICAST_IF 2 #else #define IP_MULTICAST_IF 9 /* or 16, or 32 */ #endif #endif #ifndef IP_MULTICAST_TTL #define IP_MULTICAST_TTL (IP_MULTICAST_IF + 1) #endif #ifndef IP_MULTICAST_LOOP #define IP_MULTICAST_LOOP (IP_MULTICAST_IF + 2) #endif #ifndef IP_ADD_MEMBERSHIP struct ip_mreq { struct in_addr imr_multiaddr; struct in_addr imr_interface; }; #define IP_ADD_MEMBERSHIP (IP_MULTICAST_IF + 3) #endif #ifndef IP_DROP_MEMBERSHIP #define IP_DROP_MEMBERSHIP (IP_MULTICAST_IF + 4) #endif #ifndef TCP_NODELAY #define TCP_NODELAY 0x1 #endif #ifndef SOL_SOCKET #define SOL_SOCKET 0xffff /* or 1 */ #endif #ifndef SO_REUSEADDR #define SO_REUSEADDR 0x4 /* or 2 */ #endif #ifndef SO_KEEPALIVE #define SO_KEEPALIVE 0x8 /* or 9 */ #endif #ifndef SO_BROADCAST #define SO_BROADCAST 0x20 /* or 6 */ #endif #ifndef SO_LINGER #define SO_LINGER 0x80 /* or 13 */ #endif #ifndef SO_OOBINLINE #define SO_OOBINLINE 0x100 /* or 10 */ #endif #ifndef SO_SNDBUF #define SO_SNDBUF 0x1001 /* or 7 */ #endif #ifndef SO_RCVBUF #define SO_RCVBUF 0x1002 /* or 8 */ #endif #ifndef MSG_OOB #define MSG_OOB 0x1 #endif #ifndef MSG_PEEK #define MSG_PEEK 0x2 #endif #ifndef SD_RECEIVE #ifdef SHUT_RD #define SD_RECEIVE SHUT_RD #else #define SD_RECEIVE 0 #endif #endif #ifndef SD_SEND #ifdef SHUT_WR #define SD_SEND SHUT_WR #else #define SD_SEND 1 #endif #endif #ifndef SD_BOTH #ifdef SHUT_RDWR #define SD_BOTH SHUT_RDWR #else #define SD_BOTH 2 #endif #endif #ifdef AF_INET6 #ifdef IN6ADDR_ANY_INIT #define JCGO_IPV6_PRESENT #else #ifdef USE_IPV6 #define JCGO_IPV6_PRESENT #else #ifdef s6_addr #define JCGO_IPV6_PRESENT #endif #endif #endif #endif #ifdef JCGO_IPV6_PRESENT #ifndef IPPROTO_IPV6 #define IPPROTO_IPV6 41 #endif #ifndef IPV6_MULTICAST_IF #define IPV6_MULTICAST_IF IP_MULTICAST_IF /* or 6, or 17 */ #endif #ifndef IPV6_JOIN_GROUP #ifdef IPV6_ADD_MEMBERSHIP #define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP #else #define IPV6_JOIN_GROUP (IPV6_MULTICAST_IF + 3) #endif #endif #ifndef IPV6_LEAVE_GROUP #ifdef IPV6_DROP_MEMBERSHIP #define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP #else #define IPV6_LEAVE_GROUP (IPV6_MULTICAST_IF + 4) #endif #endif #endif /* JCGO_IPV6_PRESENT */ #endif