00001
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef _SOCKETS_socket_include_H
00033 #define _SOCKETS_socket_include_H
00034 #include "sockets-config.h"
00035
00036 #ifdef _MSC_VER
00037 #pragma warning(disable:4514)
00038 #endif
00039
00040
00041
00042
00043
00044 #define SOCKETS_DYNAMIC_TEMP
00045
00047 typedef unsigned long socketuid_t;
00048
00049
00050 #if (defined(__unix__) || defined(unix)) && !defined(USG)
00051 #include <sys/param.h>
00052 #endif
00053 #include <list>
00054
00055
00056 #ifdef _WIN32
00057 #ifndef uint64_t
00058 typedef unsigned __int64 uint64_t;
00059 #endif
00060 #ifndef int64_t
00061 typedef __int64 int64_t;
00062 #endif
00063 #else
00064 #include <stdlib.h>
00065 #ifdef SOLARIS
00066 # include <sys/types.h>
00067 #else
00068 # include <stdint.h>
00069 #endif
00070 #endif
00071
00072 #ifndef _WIN32
00073
00074
00075 #include <sys/time.h>
00076 #include <sys/types.h>
00077 #include <sys/socket.h>
00078 #include <netinet/in.h>
00079 #include <arpa/inet.h>
00080
00081
00082
00083 typedef int SOCKET;
00084 #define Errno errno
00085 #define StrError strerror
00086
00087 #ifdef SOCKETS_NAMESPACE
00088 namespace SOCKETS_NAMESPACE {
00089 #endif
00090
00091
00092
00093 #define closesocket close
00094 #define INVALID_SOCKET -1
00095 #define SOCKET_ERROR -1
00096
00097 #ifndef INADDR_NONE
00098 #define INADDR_NONE ((unsigned long) -1)
00099 #endif // INADDR_NONE
00100
00101 #ifdef SOCKETS_NAMESPACE
00102 }
00103 #endif
00104
00105 #endif // !_WIN32
00106
00107
00108
00109
00110 #ifndef SOL_IP
00111 #define SOL_IP IPPROTO_IP
00112 #endif
00113
00114
00115
00116
00117
00118 #ifdef SOLARIS
00119
00120
00121 typedef unsigned short port_t;
00122 #ifdef SOCKETS_NAMESPACE
00123 namespace SOCKETS_NAMESPACE {
00124 #endif
00125
00126
00127 #ifdef SOCKETS_NAMESPACE
00128 }
00129 #endif
00130
00131 #define s6_addr16 _S6_un._S6_u8
00132 #define MSG_NOSIGNAL 0
00133
00134 #elif defined __FreeBSD__
00135
00136
00137 # if __FreeBSD_version >= 400014
00138 # define s6_addr16 __u6_addr.__u6_addr16
00139 # if !defined(MSG_NOSIGNAL)
00140 # define MSG_NOSIGNAL 0
00141 # endif
00142 # include <netinet/in.h>
00143 typedef in_addr_t ipaddr_t;
00144 typedef in_port_t port_t;
00145 #ifdef SOCKETS_NAMESPACE
00146 namespace SOCKETS_NAMESPACE {
00147 #endif
00148
00149
00150 #ifdef SOCKETS_NAMESPACE
00151 }
00152 #endif
00153
00154 # define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP
00155 # define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP
00156 # else
00157 # error FreeBSD versions prior to 400014 does not support ipv6
00158 # endif
00159
00160 #elif defined MACOSX
00161
00162
00163
00164 #ifdef __DARWIN_UNIX03
00165 typedef unsigned short port_t;
00166 #else
00167 #include <mach/port.h>
00168 #endif // __DARWIN_UNIX03
00169 typedef unsigned long ipaddr_t;
00170 #ifdef SOCKETS_NAMESPACE
00171 namespace SOCKETS_NAMESPACE {
00172 #endif
00173
00174
00175 #ifdef SOCKETS_NAMESPACE
00176 }
00177 #endif
00178
00179 #define s6_addr16 __u6_addr.__u6_addr16
00180 #define MSG_NOSIGNAL 0 // oops - thanks Derek
00181 #define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP
00182 #define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP
00183
00184 #elif defined _WIN32
00185
00186
00187 #ifdef _MSC_VER
00188 #pragma comment(lib, "wsock32.lib")
00189 #endif
00190 #define strcasecmp _stricmp
00191 #ifndef __CYGWIN__
00192 #define snprintf sprintf_s
00193 #define vsnprintf vsprintf_s
00194 #endif
00195
00196 typedef unsigned long ipaddr_t;
00197 typedef unsigned short port_t;
00198 typedef int socklen_t;
00199 #ifdef SOCKETS_NAMESPACE
00200 namespace SOCKETS_NAMESPACE {
00201 #endif
00202
00203
00204 #ifdef SOCKETS_NAMESPACE
00205 }
00206 #endif
00207
00208
00209
00210
00211
00212
00213
00214
00215 #define WIN32_LEAN_AND_MEAN
00216 #include <winsock2.h>
00217 #include <ws2tcpip.h>
00218 #if _MSC_VER < 1200
00219 #ifndef __CYGWIN__
00220 #ifdef ENABLE_IPV6
00221 #include <tpipv6.h>
00222 #endif
00223 #endif
00224 #endif // _MSC_VER < 1200
00225
00226
00227 #define MSG_NOSIGNAL 0
00228
00229 #define SHUT_WR 1
00230
00231 #define Errno WSAGetLastError()
00232 const char *StrError(int x);
00233
00234 #ifdef SOCKETS_NAMESPACE
00235 namespace SOCKETS_NAMESPACE {
00236 #endif
00237
00238
00239
00240
00241
00242 class WSAInitializer
00243 {
00244 public:
00245 WSAInitializer() {
00246 if (WSAStartup(0x101,&m_wsadata))
00247 {
00248 exit(-1);
00249 }
00250 }
00251 ~WSAInitializer() {
00252 WSACleanup();
00253 }
00254 private:
00255 WSADATA m_wsadata;
00256 };
00257
00258 #ifdef SOCKETS_NAMESPACE
00259 }
00260 #endif
00261
00262 #else
00263
00264
00265 typedef unsigned long ipaddr_t;
00266 typedef unsigned short port_t;
00267 #ifdef SOCKETS_NAMESPACE
00268 namespace SOCKETS_NAMESPACE {
00269 #endif
00270
00271
00272 #ifdef SOCKETS_NAMESPACE
00273 }
00274 #endif
00275
00276
00277 #endif
00278
00279 #ifdef SOCKETS_NAMESPACE
00280 namespace SOCKETS_NAMESPACE {
00281 #endif
00282
00283 typedef std::list<SOCKET> socket_v;
00284
00285
00286 #ifdef SOCKETS_NAMESPACE
00287 }
00288 #endif
00289
00290
00291
00292 #ifdef NO_GETADDRINFO
00293 #ifndef AI_NUMERICHOST
00294 #define AI_NUMERICHOST 1
00295 #endif
00296 #ifndef NI_NUMERICHOST
00297 #define NI_NUMERICHOST 1
00298 #endif
00299 #endif
00300
00301
00302 #endif // _SOCKETS_socket_include_H
00303