1#ifndef __SOCKET_PORTABLE_H__
2#define __SOCKET_PORTABLE_H__
7const int BASIC_ERROR = -1;
9#define SA_SIZEOF(addr) (((addr)->sa_family == AF_INET6) ? sizeof(sockaddr_in6) : sizeof(sockaddr_in))
14typedef unsigned long SOCKET;
16#include <sys/socket.h>
17#include <netinet/in.h>
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
47typedef unsigned long SOCKET;
48#define BAD_SOCKET 0xffffffff
58typedef u_short sa_family_t;
60inline 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);
64inline int DO_CONNECT(
const SOCKET a,
const struct sockaddr *b) {
65 return connect(a, b, SA_SIZEOF(b));
67inline int DO_SOCKET_READ(
const SOCKET a,
char *buf,
const int size) {
68 return recv(a, buf, size, 0);
70inline int DO_SOCKET_WRITE(
const SOCKET a,
const char *buff,
const int len) {
71 return send(a, buff, len, 0);
73inline 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));
76inline SOCKET DO_NEWUDP(sa_family_t family) {
77 return socket(family, SOCK_DGRAM, 0);
79inline SOCKET DO_NEWTCP(sa_family_t family) {
80 return socket(family, SOCK_STREAM, 0);
82inline int DO_BIND(
const SOCKET a,
const sockaddr *b) {
83 return ::bind(a, b, SA_SIZEOF(b));
85inline int DO_CLOSE(
const SOCKET a) {
86 return closesocket(a);
88inline SOCKET DO_ACCEPT(SOCKET sck, sockaddr *addr) {
89 socklen_t addrlen =
sizeof(sockaddr_storage);
90 return accept(sck, addr, &addrlen);
92inline 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);
96inline int DO_LISTEN(
const SOCKET a,
const int size) {
97 return listen(a, size);
100inline int GETERROR() {
101 return WSAGetLastError();
104inline int SOCKIOCTL(
const SOCKET s,
const long flags,
unsigned long *val) {
105 return ioctlsocket(s, flags, val);
108inline int init_network() {
109 static struct WSAData mydata;
110 int answer = WSAStartup(0x0101, &mydata);
118inline bool do_shutdown_send(SOCKET s) {
119 return (shutdown(s, SD_SEND) == 0);
122typedef int socklen_t;
123const long LOCAL_NONBLOCK = 1;
124const long LOCAL_FL_SET = FIONBIO;
125const int LOCAL_BLOCKING_ERROR = WSAEWOULDBLOCK;
126const int LOCAL_CONNECT_BLOCKING = WSAEWOULDBLOCK;
127const int LOCAL_NOTCONNECTED_ERROR = WSAENOTCONN;
128const int LOCAL_TIMEOUT_ERROR = WSAETIMEDOUT;
129const SOCKET BAD_SOCKET = (SOCKET)-1;
134#elif defined(SunOS) || defined(SUNNEW) || defined(IRIX64)
136#include <sys/types.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>
154const SOCKET BAD_SOCKET = 0xffffffff;
156inline int DO_CONNECT(
const SOCKET a,
const sockaddr *b) {
157 return connect(a, b, SA_SIZEOF(b));
159inline int DO_SOCKET_READ(
const SOCKET a,
char *buf,
const int size) {
160 return recv(a, buf, size, 0);
162inline int DO_SOCKET_WRITE(
const SOCKET a,
const char *buff,
const int len) {
163 return send(a, buff, len, 0);
166inline 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));
169inline SOCKET DO_NEWUDP(sa_family_t family) {
170 return socket(family, SOCK_DGRAM, 0);
172inline SOCKET DO_NEWTCP(sa_family_t family) {
173 return socket(family, SOCK_STREAM, 0);
175inline int DO_BIND(
const SOCKET a,
const sockaddr *b) {
176 return ::bind(a, b, SA_SIZEOF(b));
178inline int DO_CLOSE(
const SOCKET a) {
181inline int DO_ACCEPT(SOCKET sck, sockaddr *addr) {
182 socklen_t addrlen =
sizeof(sockaddr_storage);
183 return accept(sck, (sockaddr *)addr, &addrlen);
186inline 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);
190inline int DO_LISTEN(
const SOCKET a,
const int size) {
191 return listen(a, size);
194inline int GETERROR() {
198inline int SOCKIOCTL(
const SOCKET s,
const long flags,
void *val) {
199 return ioctl(s, flags, val);
202inline int init_network() {
206const INADDR_NONE = -1;
209const long LOCAL_NONBLOCK = 1;
210const long LOCAL_FL_SET = FIONBIO;
211const int LOCAL_BLOCKING_ERROR = EAGAIN;
212const int LOCAL_CONNECT_BLOCKING = EINPROGRESS;
218#elif defined(IS_LINUX) || defined(IS_OSX) || defined(IS_FREEBSD)
220#include <sys/types.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>
239const SOCKET BAD_SOCKET = -1;
240inline 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);
244inline int DO_CONNECT(
const SOCKET a,
const sockaddr *b) {
245 return connect(a, b, SA_SIZEOF(b));
247inline int DO_SOCKET_READ(
const SOCKET a,
char *buf,
const int size) {
248 return (
int)recv(a, buf, (
size_t)size, 0);
250inline int DO_SOCKET_WRITE(
const SOCKET a,
const char *buff,
const int len) {
251 return (
int)send(a, buff, (
size_t)len, 0);
253inline 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));
256inline SOCKET DO_NEWUDP(sa_family_t family) {
257 return socket(family, SOCK_DGRAM, 0);
259inline SOCKET DO_NEWTCP(sa_family_t family) {
260 return socket(family, SOCK_STREAM, 0);
262inline int DO_BIND(
const SOCKET a,
const sockaddr *b) {
263 return ::bind(a, b, SA_SIZEOF(b));
265inline int DO_CLOSE(
const SOCKET a) {
269inline int DO_ACCEPT(SOCKET sck, sockaddr *addr) {
270 socklen_t addrlen =
sizeof(sockaddr_storage);
271 return accept(sck, (sockaddr *)addr, &addrlen);
274inline 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);
280inline int init_network() {
281 signal(SIGPIPE, SIG_IGN);
285inline int DO_LISTEN(
const SOCKET a,
const int size) {
286 return listen(a, size);
289inline int GETERROR() {
293inline int SOCKIOCTL(
const SOCKET s,
const long flags,
void *val) {
294 return ioctl(s, (
unsigned long)flags, val);
297inline bool do_shutdown_send(SOCKET s) {
298 return (shutdown(s, SHUT_WR) == 0);
304const long LOCAL_NONBLOCK = 1;
307const int LOCAL_BLOCKING_ERROR = EAGAIN;
308const int LOCAL_CONNECT_BLOCKING = EINPROGRESS;
314No Host Type defined !!