diff -ur pxe-linux/server/mtftpd/mtftpd.c pxe-linux.new/server/mtftpd/mtftpd.c --- pxe-linux/server/mtftpd/mtftpd.c 1999-05-01 00:51:24.000000000 +0200 +++ pxe-linux.new/server/mtftpd/mtftpd.c 2004-02-11 18:04:51.387338416 +0100 @@ -67,6 +67,7 @@ #include #include #include +#include #include #include @@ -180,7 +181,19 @@ syslog(LOG_ERR, "fork: %m\n"); exit_process(1); } else if (pid != 0) { - exit_process(0); + double t = (double)GetOpenTimeout(); + time_t start = time(NULL); + n = 10; + do { + if ((n <= 0) && (errno == EAGAIN)) + usleep(100000); + + n = recvfrom(0, buf, sizeof (buf), 0, + (struct sockaddr *)&from, &fromlen); + + } while ((n > 0) || (difftime(time(NULL), start) < t)); + + exit_process(0); } } if (!getuid() || !geteuid()) {