applying fix for:
authorpgf <pgf@69ca8d6d-28ef-0310-b511-8ec308f3f277>
Wed, 20 Jul 2005 19:49:15 +0000 (19:49 +0000)
committerpgf <pgf@69ca8d6d-28ef-0310-b511-8ec308f3f277>
Wed, 20 Jul 2005 19:49:15 +0000 (19:49 +0000)
    0000271: [PATCH] tftp -g fails if a TFTP_ACK is lost

git-svn-id: svn://busybox.net/trunk/busybox@10885 69ca8d6d-28ef-0310-b511-8ec308f3f277

networking/tftp.c

index 334d03b..9b97477 100644 (file)
@@ -320,7 +320,7 @@ static inline int tftp(const int cmd, const struct hostent *host,
                        FD_ZERO(&rfds);
                        FD_SET(socketfd, &rfds);
 
-                       switch (select(FD_SETSIZE, &rfds, NULL, NULL, &tv)) {
+                       switch (select(socketfd + 1, &rfds, NULL, NULL, &tv)) {
                        case 1:
                                len = recvfrom(socketfd, buf, tftp_bufsize, 0,
                                                (struct sockaddr *) &from, &fromlen);
@@ -463,6 +463,11 @@ static inline int tftp(const int cmd, const struct hostent *host,
                                --block_nr;
                                opcode = TFTP_ACK;
                                continue;
+                       } else if (tmp + 1 == block_nr) {
+                               /* Server lost our TFTP_ACK.  Resend it */
+                               block_nr = tmp;
+                               opcode = TFTP_ACK;
+                               continue;
                        }
                }