--- iputils/tracepath6.c.orig 2005-02-06 03:51:56.168881720 -0800 +++ iputils/tracepath6.c 2005-02-06 04:01:37.723471984 -0800 @@ -66,7 +66,7 @@ int progress = -1; int broken_router; -restart: + while (1) { memset(&rcvbuf, -1, sizeof(rcvbuf)); iov.iov_base = &rcvbuf; iov.iov_len = sizeof(rcvbuf); @@ -83,7 +83,7 @@ if (res < 0) { if (errno == EAGAIN) return progress; - goto restart; + continue; } progress = 2; @@ -222,34 +222,29 @@ perror("NET ERROR"); return 0; } - goto restart; + } } int probe_ttl(int fd, int ttl) { - int i; + int i=0, res; char sndbuf[mtu]; struct probehdr *hdr = (struct probehdr*)sndbuf; -restart: - - for (i=0; i<10; i++) { - int res; - - hdr->ttl = ttl; - gettimeofday(&hdr->tv, NULL); - if (send(fd, sndbuf, mtu-overhead, 0) > 0) - break; - res = recverr(fd, ttl); - if (res==0) - return 0; - if (res > 0) - goto restart; - } - - if (i<10) { - int res; - + while (i<10) { + for (i=0; i<10; i++) { + hdr->ttl = ttl; + gettimeofday(&hdr->tv, NULL); + if (send(fd, sndbuf, mtu-overhead, 0) > 0) + break; + res = recverr(fd, ttl); + if (res==0) + return 0; + if (res > 0) { + i = 0; + continue; + } + } data_wait(fd); if (recv(fd, sndbuf, sizeof(sndbuf), MSG_DONTWAIT) > 0) { printf("%2d?: reply received 8)\n", ttl); @@ -257,7 +252,7 @@ } res = recverr(fd, ttl); if (res == 1) - goto restart; + continue; return res; }