diff -up glibc-2.5-20061008T1257/sunrpc/svc_tcp.c.orig glibc-2.5-20061008T1257/sunrpc/svc_tcp.c --- glibc-2.5-20061008T1257/sunrpc/svc_tcp.c.orig 2011-05-04 23:45:26.805528882 +0200 +++ glibc-2.5-20061008T1257/sunrpc/svc_tcp.c 2011-05-05 09:21:41.291368650 +0200 @@ -50,6 +50,7 @@ static char sccsid[] = "@(#)svc_tcp.c 1. #include #include #include +#include #ifdef USE_IN_LIBIO # include @@ -249,6 +250,11 @@ again: { if (errno == EINTR) goto again; + if (errno == EMFILE) + { + struct timespec ts = { .tv_sec = 0, .tv_nsec = 50000000 }; + nanosleep(&ts , NULL); + } return FALSE; } /* diff -up glibc-2.5-20061008T1257/sunrpc/svc_udp.c.orig glibc-2.5-20061008T1257/sunrpc/svc_udp.c --- glibc-2.5-20061008T1257/sunrpc/svc_udp.c.orig 2011-05-05 08:19:18.352898580 +0200 +++ glibc-2.5-20061008T1257/sunrpc/svc_udp.c 2011-05-05 09:36:04.253018970 +0200 @@ -46,6 +46,7 @@ static char sccsid[] = "@(#)svc_udp.c 1. #include #include #include +#include #ifdef IP_PKTINFO #include @@ -277,8 +278,16 @@ again: (int) su->su_iosz, 0, (struct sockaddr *) &(xprt->xp_raddr), &len); xprt->xp_addrlen = len; - if (rlen == -1 && errno == EINTR) - goto again; + if (rlen == -1) + { + if (errno == EINTR) + goto again; + if (errno == EMFILE) + { + struct timespec ts = { .tv_sec = 0, .tv_nsec = 50000000 }; + nanosleep(&ts , NULL); + } + } if (rlen < 16) /* < 4 32-bit ints? */ return FALSE; xdrs->x_op = XDR_DECODE; diff -up glibc-2.5-20061008T1257/sunrpc/svc_unix.c.orig glibc-2.5-20061008T1257/sunrpc/svc_unix.c --- glibc-2.5-20061008T1257/sunrpc/svc_unix.c.orig 2011-05-05 00:00:14.244894804 +0200 +++ glibc-2.5-20061008T1257/sunrpc/svc_unix.c 2011-05-05 09:22:37.244149492 +0200 @@ -48,6 +48,7 @@ #include #include #include +#include #ifdef USE_IN_LIBIO # include @@ -247,6 +248,11 @@ again: { if (errno == EINTR) goto again; + if (errno == EMFILE) + { + struct timespec ts = { .tv_sec = 0, .tv_nsec = 50000000 }; + nanosleep(&ts , NULL); + } return FALSE; } /*