diff --git a/configure b/configure index 1e9ca3f..8b21b97 100755 --- a/configure +++ b/configure @@ -165,6 +165,9 @@ check_compile 'whether we have pipe2() and O_CLOEXEC' "-DHAVE_PIPE2" \ check_compile 'whether we have SOCK_CLOEXEC' "-DHAVE_SOCK_CLOEXEC" \ '#define _GNU_SOURCE\n#include \nint main() {\nreturn socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, 0);}' +check_compile 'whether we have clock_gettime' "-DHAVE_CLOCK_GETTIME" \ +'#define _GNU_SOURCE\n#include \nint main() {\nstruct timespec now;clock_gettime(CLOCK_REALTIME, &now);\nreturn now.tv_sec ^ now.tv_nsec;}' + check_define __APPLE__ && { mac_detected=true check_define __x86_64__ && mac_64=true diff --git a/src/libproxychains.c b/src/libproxychains.c index a3509c9..b67ce83 100644 --- a/src/libproxychains.c +++ b/src/libproxychains.c @@ -127,8 +127,18 @@ static void setup_hooks(void) { static int close_fds[16]; static int close_fds_cnt = 0; +static unsigned get_rand_seed(void) { +#ifdef HAVE_CLOCK_GETTIME + struct timespec now; + clock_gettime(CLOCK_REALTIME, &now); + return now.tv_sec ^ now.tv_nsec; +#else + return time(NULL); +#endif +} + static void do_init(void) { - srand(time(NULL)); + srand(get_rand_seed()); core_initialize(); /* read the config file */