00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef NEWNET_UTIL_H
00021 #define NEWNET_UTIL_H
00022
00023 #include "platform.h"
00024
00025 static inline long
00026 difftime(const struct timeval & a, const struct timeval & b)
00027 {
00028 long diff_s = a.tv_sec - b.tv_sec;
00029 long diff_u;
00030 diff_u = a.tv_usec - b.tv_usec;
00031 if(diff_u < 0)
00032 {
00033 diff_s -= 1;
00034 diff_u += 1000000;
00035 }
00036 else if(diff_u >= 1000000)
00037 {
00038 diff_s += 1;
00039 diff_u -= 1000000;
00040 }
00041 return (diff_s * 1000) + (diff_u / 1000);
00042 }
00043
00044 #ifdef WIN32
00045
00046 static inline int
00047 gettimeofday(struct timeval * tv, void * tz)
00048 {
00049 union
00050 {
00051 LONGLONG ns100;
00052 FILETIME ft;
00053 } now;
00054 GetSystemTimeAsFileTime(&now.ft);
00055 tv->tv_usec = (long)((now.ns100 / 10LL) % 1000000LL);
00056 tv->tv_sec = (long)((now.ns100 - 116444736000000000LL) / 1000000LL);
00057 return 0;
00058 }
00059 #endif // WIN32
00060
00061 inline static void
00062 setnonblocking(int sock)
00063 {
00064 #ifndef WIN32
00065 int mode = fcntl(sock, F_GETFL, 0);
00066 fcntl(sock, F_SETFL, mode|O_NONBLOCK);
00067 #else
00068 u_long ioctlArg = 1;
00069 ioctlsocket(sock, FIONBIO, &ioctlArg);
00070 #endif // ! WIN32
00071 }
00072
00073 #endif // NEWNET_UTIL_H