--- libaitrpc/src/srv.c 2012/05/16 12:20:05 1.9.2.14 +++ libaitrpc/src/srv.c 2012/05/16 13:17:51 1.9.2.16 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: srv.c,v 1.9.2.14 2012/05/16 12:20:05 misho Exp $ +* $Id: srv.c,v 1.9.2.16 2012/05/16 13:17:51 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -482,7 +482,6 @@ int rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv, u_short Port, const char *diskDir) { int n = 1; - io_sockaddr_t sa; if (!srv || srv->srv_kill) { rpc_SetErr(EINVAL, "Invalid parameters can`t init BLOB server"); @@ -502,15 +501,18 @@ rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv, u_s srv->srv_blob.server.cli_parent = srv; memcpy(&srv->srv_blob.server.cli_sa, &srv->srv_server.cli_sa, sizeof(io_sockaddr_t)); - switch (sa.sa.sa_family) { + switch (srv->srv_blob.server.cli_sa.sa.sa_family) { case AF_INET: - sa.sin.sin_port = htons(Port ? Port : ntohs(sa.sin.sin_port) + 1); + srv->srv_blob.server.cli_sa.sin.sin_port = + htons(Port ? Port : ntohs(srv->srv_blob.server.cli_sa.sin.sin_port) + 1); break; case AF_INET6: - sa.sin6.sin6_port = htons(Port ? Port : ntohs(sa.sin6.sin6_port) + 1); + srv->srv_blob.server.cli_sa.sin6.sin6_port = + htons(Port ? Port : ntohs(srv->srv_blob.server.cli_sa.sin6.sin6_port) + 1); break; case AF_LOCAL: - strlcat(sa.sun.sun_path, ".blob", sizeof sa.sun.sun_path); + strlcat(srv->srv_blob.server.cli_sa.sun.sun_path, ".blob", + sizeof srv->srv_blob.server.cli_sa.sun.sun_path); break; default: AIT_FREE_VAL(&srv->srv_blob.dir); @@ -704,6 +706,14 @@ rpc_srv_initServer(u_int regProgID, u_char regProcID, else netBuf = io_align(netBuf, 1); /* align netBuf length */ +#ifdef HAVE_SRANDOMDEV + srandomdev(); +#else + time_t tim; + + srandom((time(&tim) ^ getpid())); +#endif + srv = malloc(sizeof(rpc_srv_t)); if (!srv) { LOGERR; @@ -789,10 +799,8 @@ rpc_srv_endServer(rpc_srv_t ** __restrict psrv) register int i; rpc_func_t *f, *tmp; - if (!psrv || !*psrv) { - rpc_SetErr(EINVAL, "Can`t destroy server because parameter is null!"); + if (!psrv || !*psrv) return; - } if (!(*psrv)->srv_blob.kill) rpc_srv_endBLOBServer(*psrv);