00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef __NET_LOWLEVEL_H
00030 #define __NET_LOWLEVEL_H
00031
00033
00034
00035
00036
00037
00038 #include <vector>
00039
00040 #ifndef _MSC_VER
00041 #include <errno.h>
00042 #include <time.h>
00043 #endif
00044
00045
00046 #if defined(__WIN32__) || defined(WIN32) || defined(_WIN32)
00047
00048 #define USE_WINSOCK
00049
00050 #include <winsock2.h>
00051
00052 #include <windows.h>
00053 #include <winsock.h>
00054
00055
00056
00057 #define SIO_GET_INTERFACE_LIST 0x4004747F
00058 #define IFF_UP 1
00059 #define IFF_LOOPBACK 4
00060 typedef struct _OLD_INTERFACE_INFO
00061 {
00062 unsigned long iiFlags;
00063 SOCKADDR iiAddress;
00064 SOCKADDR iiBroadcastAddress;
00065 SOCKADDR iiNetmask;
00066 } OLD_INTERFACE_INFO;
00067 #define INTERFACE_INFO OLD_INTERFACE_INFO
00068
00069 #else // UNIX
00070 #include <sys/time.h>
00071 #include <unistd.h>
00072 #include <netinet/in.h>
00073 #include <netdb.h>
00074 #include <sys/socket.h>
00075 #include <sys/ioctl.h>
00076 #ifndef __BEOS__
00077 #include <net/if.h>
00078 #include <arpa/inet.h>
00079 #endif
00080 #define INVALID_SOCKET -1
00081 #endif // !WIN32
00082
00083 #ifndef INADDR_NONE
00084 #define INADDR_NONE -1
00085 #endif
00086
00087
00088
00089
00090
00091 #define NIPQUAD(ad) \
00092 (int)(((ad) >> 24) & 0xff), (int)(((ad) >> 16) & 0xff), \
00093 (int)(((ad) >> 8) & 0xff), (int)((ad) & 0xff)
00094
00095 #ifdef USE_WINSOCK
00096 typedef SOCKET Socket;
00097 #else
00098 typedef int Socket;
00099 #endif
00100
00101
00102
00103
00104
00105 struct SocketSet {
00106 SocketSet() : MaxSockFD(0) {}
00107
00108 void AddSocket(Socket socket);
00109 void DelSocket(Socket socket);
00110
00111 std::vector<Socket> Sockets;
00112 std::vector<int> SocketReady;
00113 Socket MaxSockFD;
00114 };
00115
00116
00117
00118
00119
00120 extern int NetLastSocket;
00121 extern unsigned long NetLastHost;
00122 extern int NetLastPort;
00123 extern unsigned long NetLocalAddrs[];
00124
00125
00126
00127
00128
00130 extern int NetInit();
00132 extern void NetExit();
00134 extern unsigned long NetResolveHost(const std::string &host);
00136 extern int NetSocketAddr(const Socket sock);
00138 extern Socket NetOpenUDP(char* addr, int port);
00140 extern Socket NetOpenTCP(char* addr, int port);
00142 extern void NetCloseUDP(Socket sockfd);
00144 extern void NetCloseTCP(Socket sockfd);
00146 extern int NetSetNonBlocking(Socket sockfd);
00148 extern int NetConnectTCP(Socket sockfd, unsigned long addr, int port);
00150 extern int NetSendUDP(Socket sockfd, unsigned long host, int port,
00151 const void *buf, int len);
00153 extern int NetSendTCP(Socket sockfd, const void *buf, int len);
00155 extern int NetSocketReady(Socket sockfd, int timeout);
00157 extern int NetSocketSetReady(SocketSet *sockfd, int timeout);
00159 extern int NetSocketSetSocketReady(SocketSet *set, Socket socket);
00161 extern int NetRecvUDP(Socket sockfd, void *buf, int len);
00163 extern int NetRecvTCP(Socket sockfd, void *buf, int len);
00165 extern int NetListenTCP(Socket sockfd);
00167 extern Socket NetAcceptTCP(Socket sockfd);
00168
00170 extern void NetAddSocket(SocketSet *set, Socket socket);
00172 extern void NetDelSocket(SocketSet *set, Socket socket);
00173
00175
00176 #endif // !__NET_LOWLEVEL_H