diff -urN atftp.old/tftp.c atftp.dev/tftp.c
--- atftp.old/tftp.c	2006-03-25 16:41:49.000000000 +0100
+++ atftp.dev/tftp.c	2006-03-25 18:10:04.000000000 +0100
@@ -967,6 +967,7 @@
           { "tftp-timeout", 1, NULL, 'T'},
           { "mode", 1, NULL, 'M'},
           { "option", 1, NULL, 'O'},
+		  { "retry", 1, NULL, 'R'},
 #if 1
           { "timeout", 1, NULL, 't'},
           { "blksize", 1, NULL, 'b'},
@@ -986,11 +987,16 @@
      };
 
      /* Support old argument until 0.8 */
-     while ((c = getopt_long(argc, argv, /*"gpl:r:Vh"*/ "gpl:r:Vht:b:sm",
+     while ((c = getopt_long(argc, argv, /*"gpl:r:Vh"*/ "gpl:r:Vht:b:smR:",
                              options, &option_index)) != EOF)
      {
           switch (c)
           {
+		  case 'R':
+               snprintf(string, sizeof(string), "option retry %s", optarg);
+               make_arg(string, &ac, &av);
+               process_cmd(ac, av);
+		       break;
           case 'g':
                interactive = 0;
                if ((action == PUT) || (action == MGET))
diff -urN atftp.old/tftp_def.c atftp.dev/tftp_def.c
--- atftp.old/tftp_def.c	2004-02-13 04:16:09.000000000 +0100
+++ atftp.dev/tftp_def.c	2006-03-25 18:10:04.000000000 +0100
@@ -37,6 +37,7 @@
      { "timeout", "5", 0, 1 },  /* 2348, 2349, 2090.  */
      { "blksize", "512", 0, 1 }, /* This is the default option */
      { "multicast", "", 0, 1 }, /* structure */
+	 { "retry", "5", 0, 1 },
      { "", "", 0, 0}
 };
 
diff -urN atftp.old/tftp_def.h atftp.dev/tftp_def.h
--- atftp.old/tftp_def.h	2004-02-13 04:16:09.000000000 +0100
+++ atftp.dev/tftp_def.h	2006-03-25 17:19:15.000000000 +0100
@@ -40,7 +40,8 @@
 #define OPT_TIMEOUT   3
 #define OPT_BLKSIZE   4
 #define OPT_MULTICAST 5
-#define OPT_NUMBER    7
+#define OPT_RETRY     6
+#define OPT_NUMBER    8
 
 #define OPT_SIZE     12
 #define VAL_SIZE     MAXLEN
diff -urN atftp.old/tftp_file.c atftp.dev/tftp_file.c
--- atftp.old/tftp_file.c	2004-02-13 04:16:09.000000000 +0100
+++ atftp.dev/tftp_file.c	2006-03-25 18:10:04.000000000 +0100
@@ -123,6 +123,7 @@
      struct tftphdr *tftphdr = (struct tftphdr *)data->data_buffer;
      FILE *fp = NULL;           /* the local file pointer */
      int number_of_timeout = 0;
+	 int num_retry = atoi(data->tftp_options[OPT_RETRY].value);
      int convert = 0;           /* if true, do netascii convertion */
 
      int oacks = 0;             /* count OACK for improved error checking */
@@ -141,7 +142,7 @@
 
      int prev_block_number = 0; /* needed to support netascii convertion */
      int temp = 0;
-
+	 
      data->file_size = 0;
      tftp_cancel = 0;
      from.sin_addr.s_addr = 0;
@@ -288,7 +289,7 @@
                case GET_TIMEOUT:
                     number_of_timeout++;
                     fprintf(stderr, "timeout: retrying...\n");
-                    if (number_of_timeout > NB_OF_RETRY)
+                    if ((num_retry > 0) && (number_of_timeout > num_retry))
                          state = S_ABORT;
                     else
                          state = timeout_state;
@@ -325,7 +326,7 @@
                     number_of_timeout++;
                     fprintf(stderr, "tftp: packet discard <%s:%d>.\n",
                             inet_ntoa(from.sin_addr), ntohs(from.sin_port));
-                    if (number_of_timeout > NB_OF_RETRY)
+                    if ((num_retry > 0) && (number_of_timeout > num_retry))
                          state = S_ABORT;
                     break;
                case ERR:
@@ -614,6 +615,7 @@
      struct tftphdr *tftphdr = (struct tftphdr *)data->data_buffer;
      FILE *fp;                  /* the local file pointer */
      int number_of_timeout = 0;
+	 int num_retry = atoi(data->tftp_options[OPT_RETRY].value);
      struct stat file_stat;
      int convert = 0;           /* if true, do netascii convertion */
      char string[MAXLEN];
@@ -751,7 +753,7 @@
                case GET_TIMEOUT:
                     number_of_timeout++;
                     fprintf(stderr, "timeout: retrying...\n");
-                    if (number_of_timeout > NB_OF_RETRY)
+                    if ((num_retry > 0) && (number_of_timeout > num_retry))
                          state = S_ABORT;
                     else
                          state = timeout_state;
@@ -797,7 +799,7 @@
                     number_of_timeout++;
                     fprintf(stderr, "tftp: packet discard <%s:%d>.\n",
                             inet_ntoa(from.sin_addr), ntohs(from.sin_port));
-                    if (number_of_timeout > NB_OF_RETRY)
+                    if ((num_retry > 0) && (number_of_timeout > num_retry))
                          state = S_ABORT;
                     break;
                case ERR:
