1 #ifndef __SOCKET_PORTABLE_H__
2 #define __SOCKET_PORTABLE_H__
9 const int BASIC_ERROR = -1;
16 #ifndef _INCLUDE_HPUX_SOURCE
17 #define _INCLUDE_HPUX_SOURCE
18 #define _INCLUDE_POSIX_SOURCE
19 #define _INCLUDE_XOPEN_SOURCE
21 #include <sys/socket.h>
23 #include <netinet/in.h>
27 #define socket_read read
28 #define socket_write write
29 #define socket_close close
31 #define DO_CONNECT(a,b,c) connect(a,b,c)
32 #define DO_SOCKET_READ(a,b,c,d) socket_read(a,b,c)
33 #define DO_SOCKET_WRITE(a,b,c,d) socket_write(a,b,c)
35 #define GETERROR() errno
38 #define SOCKIOCTL ioctl
39 typedef unsigned long SOCKET;
40 #define BAD_SOCKET 0xffffffff
46 #elif defined(WIN32) || defined(WIN32_VC) || defined(WIN64_VC)
51 inline int DO_SELECT(SOCKET n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
struct timeval *timeout)
53 return select((
int) n, readfds, writefds, exceptfds,timeout);
56 inline int DO_CONNECT(
const SOCKET a,
const struct sockaddr_in *b)
58 return connect(a, reinterpret_cast<const struct ::sockaddr *>(b),
sizeof(sockaddr));
60 inline int DO_SOCKET_READ(
const SOCKET a,
char * buf,
const int size)
62 return recv(a, buf, size, 0);
64 inline int DO_SOCKET_WRITE(
const SOCKET a,
const char * buff,
const int len)
66 return send(a, buff, len, 0);
68 inline int DO_SOCKET_WRITE_TO(
const SOCKET a,
const char * buffer,
const int buf_len,
const sockaddr_in * addr)
70 return sendto(a, buffer, buf_len, 0, reinterpret_cast<const struct ::sockaddr *>(addr),
sizeof(sockaddr));
72 inline SOCKET DO_NEWUDP()
74 return socket(AF_INET, SOCK_DGRAM, 0);
76 inline SOCKET DO_NEWTCP()
78 return socket(AF_INET, SOCK_STREAM, 0);
80 inline int DO_BIND(
const SOCKET a,
const sockaddr_in *b)
82 return ::bind(a, reinterpret_cast<const struct ::sockaddr *>(b),
sizeof(sockaddr));
84 inline int DO_CLOSE(
const SOCKET a)
86 return closesocket(a);
88 inline SOCKET DO_ACCEPT(SOCKET sck, sockaddr_in * adr)
90 int adrlen =
sizeof(sockaddr);
91 return accept(sck, reinterpret_cast<sockaddr *>(adr), &adrlen);
93 inline int DO_RECV_FROM(SOCKET sck,
char * data,
int len, sockaddr_in * addr)
95 int plen =
sizeof(sockaddr);
96 return recvfrom(sck, data, len, 0, reinterpret_cast<sockaddr *>(addr), &plen);
98 inline int DO_LISTEN(
const SOCKET a,
const int size)
100 return listen(a, size);
103 inline int GETERROR()
105 return WSAGetLastError();
108 inline int SOCKIOCTL(
const SOCKET s,
const long flags,
unsigned long * val)
110 return ioctlsocket(s, flags, val);
113 inline int init_network()
115 static struct WSAData mydata;
116 int answer = WSAStartup(0x0101, &mydata);
123 inline bool do_shutdown_send(SOCKET s)
125 return (shutdown(s,SD_SEND) == 0);
128 typedef int socklen_t ;
129 const long LOCAL_NONBLOCK = 1;
130 const long LOCAL_FL_SET = FIONBIO ;
131 const int LOCAL_BLOCKING_ERROR = WSAEWOULDBLOCK;
132 const int LOCAL_CONNECT_BLOCKING = WSAEWOULDBLOCK;
133 const int LOCAL_NOTCONNECTED_ERROR = WSAENOTCONN;
134 const int LOCAL_TIMEOUT_ERROR = WSAETIMEDOUT;
135 const SOCKET BAD_SOCKET = (SOCKET)-1;
140 #elif defined(SunOS) || defined(SUNNEW) || defined(IRIX64)
142 #include <sys/types.h>
143 #include <sys/time.h>
144 #include <sys/socket.h>
145 #include <sys/ioctl.h>
146 #include <sys/filio.h>
147 #include <netinet/in.h>
154 #include <netinet/in_systm.h>
155 #include <netinet/ip.h>
156 #include <netinet/in.h>
157 #include <arpa/inet.h>
160 const SOCKET BAD_SOCKET = 0xffffffff;
166 inline int DO_CONNECT(
const SOCKET a,
const sockaddr_in *b)
168 return connect(a, reinterpret_cast<const struct ::sockaddr *>(b),
sizeof(sockaddr));
170 inline int DO_SOCKET_READ(
const SOCKET a,
char * buf,
const int size)
172 return recv(a, buf, size, 0);
174 inline int DO_SOCKET_WRITE(
const SOCKET a,
const char * buff,
const int len)
176 return send(a, buff, len, 0);
184 inline int DO_SOCKET_WRITE_TO(
const SOCKET a,
const char * buffer,
const int buf_len,
const sockaddr_in * addr)
186 return sendto(a, buffer, buf_len, 0, reinterpret_cast<const struct ::sockaddr *>(addr),
sizeof(sockaddr));
188 inline SOCKET DO_NEWUDP()
190 return socket(AF_INET, SOCK_DGRAM, 0);
192 inline SOCKET DO_NEWTCP()
194 return socket(AF_INET, SOCK_STREAM, 0);
196 inline int DO_BIND(
const SOCKET a,
const sockaddr_in *b)
198 return ::bind(a, reinterpret_cast<const struct ::sockaddr *>(b),
sizeof(sockaddr));
200 inline int DO_CLOSE(
const SOCKET a)
204 inline int DO_ACCEPT(SOCKET sck, sockaddr_in * adr)
206 int adrlen =
sizeof(sockaddr);
207 return accept(sck, ( sockaddr *)adr, &adrlen);
210 inline int DO_RECV_FROM(SOCKET sck,
char * data,
int len, sockaddr_in * addr)
212 int plen =
sizeof(sockaddr);
213 return recvfrom(sck, data, len, 0, (sockaddr *)addr, &plen);
215 inline int DO_LISTEN(
const SOCKET a,
const int size)
217 return listen(a, size);
220 inline int GETERROR()
225 inline int SOCKIOCTL(
const SOCKET s,
const long flags,
void * val)
227 return ioctl(s, flags, val);
230 inline int init_network()
235 const INADDR_NONE = -1;
238 const long LOCAL_NONBLOCK = 1;
239 const long LOCAL_FL_SET = FIONBIO ;
240 const int LOCAL_BLOCKING_ERROR = EAGAIN;
241 const int LOCAL_CONNECT_BLOCKING = EINPROGRESS;
247 #elif defined(IS_LINUX) || defined(IS_OSX) || defined(IS_FREEBSD)
249 #include <sys/types.h>
250 #include <sys/time.h>
251 #include <sys/socket.h>
252 #include <sys/ioctl.h>
253 #include <netinet/in.h>
261 #include <netinet/tcp.h>
263 #include <netinet/in.h>
264 #include <arpa/inet.h>
267 typedef struct sockaddr_in AddressType;
270 const SOCKET BAD_SOCKET = -1;
271 inline int DO_SELECT(SOCKET n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
struct timeval *timeout)
273 return select((
int) n, readfds, writefds, exceptfds,timeout);
276 inline int DO_CONNECT(
const SOCKET a,
const sockaddr_in *b)
278 return connect(a, reinterpret_cast<const struct ::sockaddr *>(b),
sizeof(sockaddr));
280 inline int DO_SOCKET_READ(
const SOCKET a,
char * buf,
const int size)
282 return recv(a, buf, size, 0);
284 inline int DO_SOCKET_WRITE(
const SOCKET a,
const char * buff,
const int len)
286 return send(a, buff, len, 0);
289 inline int DO_SOCKET_WRITE_TO(
const SOCKET a,
const char * buffer,
const int buf_len,
const sockaddr_in * addr)
291 return sendto(a, buffer, buf_len, 0, reinterpret_cast<const struct ::sockaddr *>(addr),
sizeof(sockaddr));
293 inline SOCKET DO_NEWUDP()
295 return socket(AF_INET, SOCK_DGRAM, 0);
297 inline SOCKET DO_NEWTCP()
299 return socket(AF_INET, SOCK_STREAM, 0);
301 inline int DO_BIND(
const SOCKET a,
const sockaddr_in *b)
303 return ::bind(a, reinterpret_cast<const struct ::sockaddr *>(b),
sizeof(sockaddr));
305 inline int DO_CLOSE(
const SOCKET a)
310 inline int DO_ACCEPT(SOCKET sck, sockaddr_in * adr)
312 socklen_t adrlen =
sizeof(sockaddr);
313 return accept(sck, ( sockaddr *)adr, &adrlen);
316 inline int DO_RECV_FROM(SOCKET sck,
char * data,
int len, sockaddr_in * addr)
318 socklen_t plen =
sizeof(sockaddr);
319 return recvfrom(sck, data, len, 0, (sockaddr *)addr, &plen);
323 inline int init_network()
325 signal(SIGPIPE, SIG_IGN);
329 inline int DO_LISTEN(
const SOCKET a,
const int size)
331 return listen(a, size);
334 inline int GETERROR()
339 inline int SOCKIOCTL(
const SOCKET s,
const long flags,
void * val)
341 return ioctl(s, flags, val);
344 inline bool do_shutdown_send(SOCKET s)
346 return (shutdown(s,SHUT_WR) == 0);
353 const long LOCAL_NONBLOCK = 1;
356 const int LOCAL_BLOCKING_ERROR = EAGAIN;
357 const int LOCAL_CONNECT_BLOCKING = EINPROGRESS;
363 No Host Type defined !!
369 #endif //__SOCKET_PORTABLE_H__