Index: fhandler_socket.cc =================================================================== RCS file: /cvs/src/src/winsup/cygwin/fhandler_socket.cc,v retrieving revision 1.7 diff -u -p -2 -r1.7 fhandler_socket.cc --- fhandler_socket.cc 2001/04/18 21:10:12 1.7 +++ fhandler_socket.cc 2001/05/03 15:52:39 @@ -30,4 +30,6 @@ #define SECRET_EVENT_NAME "cygwin.local_socket.secret.%d.%08x-%08x-%08x-%08x" +fhandler_dev_random* entropy_source = NULL; + /**********************************************************************/ /* fhandler_socket */ @@ -51,6 +53,22 @@ void fhandler_socket::set_connect_secret () { - for (int i = 0; i < 4; i++) - connect_secret [i] = random (); + if (!entropy_source) + { + void *buf = malloc (sizeof (fhandler_dev_random)); + entropy_source = new (buf) fhandler_dev_random ("/dev/random", 8); + } + if (entropy_source && + !entropy_source->open ("/dev/random", O_RDONLY)) + { + delete entropy_source; + entropy_source = NULL; + } + if (!entropy_source || + (entropy_source->read (connect_secret, sizeof (connect_secret)) != + sizeof (connect_secret))) + { + for (int i = 0; i < 4; i++) + connect_secret [i] = random (); + } }