prngd моделирует «/ dev/random» и «/ dev/urandom» по сетевому соединению. Он поддерживает либо сокет домена на основе потока Unix («/ var/run/egd-pool»), либо (если настроен) или IP с использованием портов TCP 708 или 4840 (значения по умолчанию --- могут быть изменены).
Таким образом, при использовании домена сокета Unix, это будет выглядеть примерно так:
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
int devrandom(void)
{
union
{
struct sockaddr sa;
struct sockaddr_un path;
} location;
int sock;
memset(&location,0,sizeof(location));
location.path.sun_family = AF_UNIX;
strcpy(location.path.sun_path,"/var/run/egd-pool");
sock = socket(AF_UNIX,SOCK_STREAM,0);
if (sock < 0)
return -1;
if (connect(sock,&location.sa,sizeof(struct sockaddr_un)) < 0)
return -1;
return sock;
}
Это возвращает дескриптор файла можно передать следующим образом() для получения случайных данных (примечание: это код не проверен). Соединение на основе TCP/IP более активно, требуя привязки сокета к локальному адресу и подключения к удаленному адресу, но в этом коде есть много примеров для Интернета.