Package: tftpd
Version: 0.17-15
Severity: wishlist

If the client is too slow (eg embedded systems), tftp might not bei
able to deliver the data and receive a "tftpd: write: Connection refused".
The patch below makes tftpd retry 3 times when a paket couldn't be send
with a delay of 1ms.


--- tftpd.c.old 2000-07-29 20:37:21.000000000 +0200
+++ tftpd.c     2007-07-17 09:56:17.000000000 +0200
@@ -401,6 +437,7 @@
        register struct tftphdr *ap;    /* ack packet */
        volatile u_int16_t block = 1;
        int size, n;
+       int retry_cnt, ret;
 
        mysignal(SIGALRM, timer);
        dp = r_init();
@@ -417,7 +454,14 @@
                (void) sigsetjmp(timeoutbuf, 1);
 
 send_data:
-               if (send(peer, dp, size + 4, 0) != size + 4) {
+               retry_cnt = 0;
+               ret = 0;
+               while(retry_cnt <3 && ret != size + 4){
+                       ret = send(peer, dp, size + 4, 0);
+                       if(ret != size + 4)
+                               usleep(1000); /* sleep 1ms */
+               }
+               if (ret != size + 4) {
                        syslog(LOG_ERR, "tftpd: write: %m\n");
                        goto abort;
                }
@@ -473,6 +517,7 @@
        struct tftphdr *ap;    /* ack buffer */
        volatile u_int16_t block = 0;
        int n, size;
+       int retry_cnt, ret;
 
        mysignal(SIGALRM, timer);
        dp = w_init();
@@ -484,7 +531,14 @@
                block++;
                (void) sigsetjmp(timeoutbuf, 1);
 send_ack:
-               if (send(peer, ackbuf, 4, 0) != 4) {
+               retry_cnt = 0;
+               ret = 0;
+               while(retry_cnt <3 && ret != size + 4){
+                       ret = send(peer, dp, size + 4, 0);
+                       if(ret != size + 4)
+                               usleep(1000); /* sleep 1ms */
+               }
+               if (ret != size + 4) {
                        syslog(LOG_ERR, "tftpd: write: %m\n");
                        goto abort;
                }

-- System Information:
Debian Release: lenny/sid
  APT prefers testing
  APT policy: (990, 'testing'), (500, 'unstable')
Architecture: i386 (i686)

Kernel: Linux 2.6.21.5
Locale: LANG=de_CH.ISO-8859-1, LC_CTYPE=de_CH.ISO-8859-1 (charmap=ISO-8859-1)
Shell: /bin/sh linked to /bin/bash

Versions of packages tftpd depends on:
ii  libc6                         2.5-9+b1   GNU C Library: Shared libraries
ii  netbase                       4.29       Basic TCP/IP networking system

tftpd recommends no packages.

-- no debconf information


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to