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 #include <unistd.h>
00081
00082
00083
00084 typedef int SOCKET;
00085 #define Errno errno
00086 #define StrError strerror
00087
00088 #ifdef SOCKETS_NAMESPACE
00089 namespace SOCKETS_NAMESPACE {
00090 #endif
00091
00092
00093
00094 #define closesocket close
00095 #define INVALID_SOCKET -1
00096 #define SOCKET_ERROR -1
00097
00098 #ifndef INADDR_NONE
00099 #define INADDR_NONE ((unsigned long) -1)
00100 #endif // INADDR_NONE
00101
00102 #ifdef SOCKETS_NAMESPACE
00103 }
00104 #endif
00105
00106 #endif // !_WIN32
00107
00108
00109
00110
00111 #ifndef SOL_IP
00112 #define SOL_IP IPPROTO_IP
00113 #endif
00114
00115
00116
00117
00118
00119 #ifdef SOLARIS
00120
00121
00122 typedef unsigned short port_t;
00123 #ifdef SOCKETS_NAMESPACE
00124 namespace SOCKETS_NAMESPACE {
00125 #endif
00126
00127
00128 #ifdef SOCKETS_NAMESPACE
00129 }
00130 #endif
00131
00132 #define s6_addr16 _S6_un._S6_u8
00133 #define MSG_NOSIGNAL 0
00134
00135 #elif defined __FreeBSD__
00136
00137
00138 # if __FreeBSD_version >= 400014
00139 # define s6_addr16 __u6_addr.__u6_addr16
00140 # if !defined(MSG_NOSIGNAL)
00141 # define MSG_NOSIGNAL 0
00142 # endif
00143 # include <netinet/in.h>
00144 typedef in_addr_t ipaddr_t;
00145 typedef in_port_t port_t;
00146 #ifdef SOCKETS_NAMESPACE
00147 namespace SOCKETS_NAMESPACE {
00148 #endif
00149
00150
00151 #ifdef SOCKETS_NAMESPACE
00152 }
00153 #endif
00154
00155 # define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP
00156 # define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP
00157 # else
00158 # error FreeBSD versions prior to 400014 does not support ipv6
00159 # endif
00160
00161 #elif defined MACOSX
00162
00163
00164
00165 #ifdef __DARWIN_UNIX03
00166 typedef unsigned short port_t;
00167 #else
00168 #include <mach/port.h>
00169 #endif // __DARWIN_UNIX03
00170 typedef unsigned long ipaddr_t;
00171 #ifdef SOCKETS_NAMESPACE
00172 namespace SOCKETS_NAMESPACE {
00173 #endif
00174
00175
00176 #ifdef SOCKETS_NAMESPACE
00177 }
00178 #endif
00179
00180 #define s6_addr16 __u6_addr.__u6_addr16
00181 #define MSG_NOSIGNAL 0 // oops - thanks Derek
00182 #define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP
00183 #define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP
00184
00185 #elif defined _WIN32
00186
00187
00188 #ifdef _MSC_VER
00189 #pragma comment(lib, "wsock32.lib")
00190 #endif
00191 #define strcasecmp _stricmp
00192 #ifndef __CYGWIN__
00193 #define snprintf sprintf_s
00194 #define vsnprintf vsprintf_s
00195 #endif
00196
00197 typedef unsigned long ipaddr_t;
00198 typedef unsigned short port_t;
00199 typedef int socklen_t;
00200 #ifdef SOCKETS_NAMESPACE
00201 namespace SOCKETS_NAMESPACE {
00202 #endif
00203
00204
00205 #ifdef SOCKETS_NAMESPACE
00206 }
00207 #endif
00208
00209
00210
00211
00212
00213
00214
00215
00216 #define WIN32_LEAN_AND_MEAN
00217 #include <winsock2.h>
00218 #include <ws2tcpip.h>
00219 #if _MSC_VER < 1200
00220 #ifndef __CYGWIN__
00221 #ifdef ENABLE_IPV6
00222 #include <tpipv6.h>
00223 #endif
00224 #endif
00225 #endif // _MSC_VER < 1200
00226
00227
00228 #define MSG_NOSIGNAL 0
00229
00230 #define SHUT_WR 1
00231
00232 #define Errno WSAGetLastError()
00233 const char *StrError(int x);
00234
00235 #ifdef SOCKETS_NAMESPACE
00236 namespace SOCKETS_NAMESPACE {
00237 #endif
00238
00239
00240
00241
00242
00243 class WSAInitializer
00244 {
00245 public:
00246 WSAInitializer() {
00247 if (WSAStartup(0x101,&m_wsadata))
00248 {
00249 exit(-1);
00250 }
00251 }
00252 ~WSAInitializer() {
00253 WSACleanup();
00254 }
00255 private:
00256 WSADATA m_wsadata;
00257 };
00258
00259 #ifdef SOCKETS_NAMESPACE
00260 }
00261 #endif
00262
00263 #else
00264
00265
00266 typedef unsigned long ipaddr_t;
00267 typedef unsigned short port_t;
00268 #ifdef SOCKETS_NAMESPACE
00269 namespace SOCKETS_NAMESPACE {
00270 #endif
00271
00272
00273 #ifdef SOCKETS_NAMESPACE
00274 }
00275 #endif
00276
00277
00278 #endif
00279
00280 #ifdef SOCKETS_NAMESPACE
00281 namespace SOCKETS_NAMESPACE {
00282 #endif
00283
00284 typedef std::list<SOCKET> socket_v;
00285
00286
00287 #ifdef SOCKETS_NAMESPACE
00288 }
00289 #endif
00290
00291
00292
00293 #ifdef NO_GETADDRINFO
00294 #ifndef AI_NUMERICHOST
00295 #define AI_NUMERICHOST 1
00296 #endif
00297 #ifndef NI_NUMERICHOST
00298 #define NI_NUMERICHOST 1
00299 #endif
00300 #endif
00301
00302
00303 #endif // _SOCKETS_socket_include_H
00304