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__