1 #ifndef __SOCKET_PORTABLE_H__ 2 #define __SOCKET_PORTABLE_H__ 7 const int BASIC_ERROR = -1;
9 #define SA_SIZEOF(addr) (((addr)->sa_family == AF_INET6) ? sizeof(sockaddr_in6) : sizeof(sockaddr_in)) 11 #if defined(CPPPARSER) 14 typedef unsigned long SOCKET;
16 #include <sys/socket.h> 17 #include <netinet/in.h> 22 #elif defined(HP_SOCK) 24 #ifndef _INCLUDE_HPUX_SOURCE 25 #define _INCLUDE_HPUX_SOURCE 26 #define _INCLUDE_POSIX_SOURCE 27 #define _INCLUDE_XOPEN_SOURCE 29 #include <sys/socket.h> 31 #include <netinet/in.h> 35 #define socket_read read 36 #define socket_write write 37 #define socket_close close 39 #define DO_CONNECT(a,b,c) connect(a,b,c) 40 #define DO_SOCKET_READ(a,b,c,d) socket_read(a,b,c) 41 #define DO_SOCKET_WRITE(a,b,c,d) socket_write(a,b,c) 43 #define GETERROR() errno 46 #define SOCKIOCTL ioctl 47 typedef unsigned long SOCKET;
48 #define BAD_SOCKET 0xffffffff 58 typedef u_short sa_family_t;
60 inline int DO_SELECT(SOCKET n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
struct timeval *timeout) {
61 return select((
int)n, readfds, writefds, exceptfds, timeout);
64 inline int DO_CONNECT(
const SOCKET a,
const struct sockaddr *b) {
65 return connect(a, b, SA_SIZEOF(b));
67 inline int DO_SOCKET_READ(
const SOCKET a,
char *buf,
const int size) {
68 return recv(a, buf, size, 0);
70 inline int DO_SOCKET_WRITE(
const SOCKET a,
const char *buff,
const int len) {
71 return send(a, buff, len, 0);
73 inline int DO_SOCKET_WRITE_TO(
const SOCKET a,
const char *buffer,
const int buf_len,
const sockaddr *addr) {
74 return sendto(a, buffer, buf_len, 0, addr, SA_SIZEOF(addr));
76 inline SOCKET DO_NEWUDP(sa_family_t family) {
77 return socket(family, SOCK_DGRAM, 0);
79 inline SOCKET DO_NEWTCP(sa_family_t family) {
80 return socket(family, SOCK_STREAM, 0);
82 inline int DO_BIND(
const SOCKET a,
const sockaddr *b) {
83 return ::bind(a, b, SA_SIZEOF(b));
85 inline int DO_CLOSE(
const SOCKET a) {
86 return closesocket(a);
88 inline SOCKET DO_ACCEPT(SOCKET sck, sockaddr *addr) {
89 socklen_t addrlen =
sizeof(sockaddr_storage);
90 return accept(sck, addr, &addrlen);
92 inline int DO_RECV_FROM(SOCKET sck,
char *data,
int len, sockaddr *addr) {
93 socklen_t plen =
sizeof(sockaddr_storage);
94 return recvfrom(sck, data, len, 0, addr, &plen);
96 inline int DO_LISTEN(
const SOCKET a,
const int size) {
97 return listen(a, size);
100 inline int GETERROR() {
101 return WSAGetLastError();
104 inline int SOCKIOCTL(
const SOCKET s,
const long flags,
unsigned long *val) {
105 return ioctlsocket(s, flags, val);
108 inline int init_network() {
109 static struct WSAData mydata;
110 int answer = WSAStartup(0x0101, &mydata);
118 inline bool do_shutdown_send(SOCKET s) {
119 return (shutdown(s, SD_SEND) == 0);
122 typedef int socklen_t;
123 const long LOCAL_NONBLOCK = 1;
124 const long LOCAL_FL_SET = FIONBIO;
125 const int LOCAL_BLOCKING_ERROR = WSAEWOULDBLOCK;
126 const int LOCAL_CONNECT_BLOCKING = WSAEWOULDBLOCK;
127 const int LOCAL_NOTCONNECTED_ERROR = WSAENOTCONN;
128 const int LOCAL_TIMEOUT_ERROR = WSAETIMEDOUT;
129 const SOCKET BAD_SOCKET = (SOCKET)-1;
134 #elif defined(SunOS) || defined(SUNNEW) || defined(IRIX64) 136 #include <sys/types.h> 137 #include <sys/time.h> 138 #include <sys/socket.h> 139 #include <sys/ioctl.h> 140 #include <sys/filio.h> 141 #include <netinet/in.h> 148 #include <netinet/in_systm.h> 149 #include <netinet/ip.h> 150 #include <netinet/in.h> 151 #include <arpa/inet.h> 154 const SOCKET BAD_SOCKET = 0xffffffff;
156 inline int DO_CONNECT(
const SOCKET a,
const sockaddr *b) {
157 return connect(a, b, SA_SIZEOF(b));
159 inline int DO_SOCKET_READ(
const SOCKET a,
char *buf,
const int size) {
160 return recv(a, buf, size, 0);
162 inline int DO_SOCKET_WRITE(
const SOCKET a,
const char *buff,
const int len) {
163 return send(a, buff, len, 0);
166 inline int DO_SOCKET_WRITE_TO(
const SOCKET a,
const char *buffer,
const int buf_len,
const sockaddr *addr) {
167 return sendto(a, buffer, buf_len, 0, addr, SA_SIZEOF(addr));
169 inline SOCKET DO_NEWUDP(sa_family_t family) {
170 return socket(family, SOCK_DGRAM, 0);
172 inline SOCKET DO_NEWTCP(sa_family_t family) {
173 return socket(family, SOCK_STREAM, 0);
175 inline int DO_BIND(
const SOCKET a,
const sockaddr *b) {
176 return ::bind(a, b, SA_SIZEOF(b));
178 inline int DO_CLOSE(
const SOCKET a) {
181 inline int DO_ACCEPT(SOCKET sck, sockaddr *addr) {
182 socklen_t addrlen =
sizeof(sockaddr_storage);
183 return accept(sck, (sockaddr *)addr, &addrlen);
186 inline int DO_RECV_FROM(SOCKET sck,
char *data,
int len, sockaddr *addr) {
187 socklen_t plen =
sizeof(sockaddr_storage);
188 return recvfrom(sck, data, len, 0, (sockaddr *)addr, &plen);
190 inline int DO_LISTEN(
const SOCKET a,
const int size) {
191 return listen(a, size);
194 inline int GETERROR() {
198 inline int SOCKIOCTL(
const SOCKET s,
const long flags,
void *val) {
199 return ioctl(s, flags, val);
202 inline int init_network() {
206 const INADDR_NONE = -1;
209 const long LOCAL_NONBLOCK = 1;
210 const long LOCAL_FL_SET = FIONBIO;
211 const int LOCAL_BLOCKING_ERROR = EAGAIN;
212 const int LOCAL_CONNECT_BLOCKING = EINPROGRESS;
218 #elif defined(IS_LINUX) || defined(IS_OSX) || defined(IS_FREEBSD) 220 #include <sys/types.h> 221 #include <sys/time.h> 222 #include <sys/socket.h> 223 #include <sys/ioctl.h> 224 #include <netinet/in.h> 232 #include <netinet/tcp.h> 234 #include <netinet/in.h> 235 #include <arpa/inet.h> 239 const SOCKET BAD_SOCKET = -1;
240 inline int DO_SELECT(SOCKET n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
struct timeval *timeout) {
241 return select((
int)n, readfds, writefds, exceptfds, timeout);
244 inline int DO_CONNECT(
const SOCKET a,
const sockaddr *b) {
245 return connect(a, b, SA_SIZEOF(b));
247 inline int DO_SOCKET_READ(
const SOCKET a,
char *buf,
const int size) {
248 return (
int)recv(a, buf, (
size_t)size, 0);
250 inline int DO_SOCKET_WRITE(
const SOCKET a,
const char *buff,
const int len) {
251 return (
int)send(a, buff, (
size_t)len, 0);
253 inline int DO_SOCKET_WRITE_TO(
const SOCKET a,
const char *buffer,
const int buf_len,
const sockaddr *addr) {
254 return (
int)sendto(a, buffer, (
size_t)buf_len, 0, addr, SA_SIZEOF(addr));
256 inline SOCKET DO_NEWUDP(sa_family_t family) {
257 return socket(family, SOCK_DGRAM, 0);
259 inline SOCKET DO_NEWTCP(sa_family_t family) {
260 return socket(family, SOCK_STREAM, 0);
262 inline int DO_BIND(
const SOCKET a,
const sockaddr *b) {
263 return ::bind(a, b, SA_SIZEOF(b));
265 inline int DO_CLOSE(
const SOCKET a) {
269 inline int DO_ACCEPT(SOCKET sck, sockaddr *addr) {
270 socklen_t addrlen =
sizeof(sockaddr_storage);
271 return accept(sck, (sockaddr *)addr, &addrlen);
274 inline int DO_RECV_FROM(SOCKET sck,
char *data,
int len, sockaddr *addr) {
275 socklen_t plen =
sizeof(sockaddr_storage);
276 return (
int)recvfrom(sck, data, (
size_t)len, 0, (sockaddr *)addr, &plen);
280 inline int init_network() {
281 signal(SIGPIPE, SIG_IGN);
285 inline int DO_LISTEN(
const SOCKET a,
const int size) {
286 return listen(a, size);
289 inline int GETERROR() {
293 inline int SOCKIOCTL(
const SOCKET s,
const long flags,
void *val) {
294 return ioctl(s, (
unsigned long)flags, val);
297 inline bool do_shutdown_send(SOCKET s) {
298 return (shutdown(s, SHUT_WR) == 0);
304 const long LOCAL_NONBLOCK = 1;
307 const int LOCAL_BLOCKING_ERROR = EAGAIN;
308 const int LOCAL_CONNECT_BLOCKING = EINPROGRESS;
314 No Host Type defined !!
318 #endif //__SOCKET_PORTABLE_H__