X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fstatd%2Fsm-notify.c;h=1059a888949cd21984837de1af31683fba90695f;hp=bb6c2efa3f4e949191f4831757f7cf5e649eafa6;hb=0210f16cf1bd2f87b7fe4336311c6dfd88030f8b;hpb=ec79b7a3b06c034a9a71a39a5ac24b66dbd475a6 diff --git a/utils/statd/sm-notify.c b/utils/statd/sm-notify.c index bb6c2ef..1059a88 100644 --- a/utils/statd/sm-notify.c +++ b/utils/statd/sm-notify.c @@ -215,7 +215,9 @@ notify(void) nsm_address local_addr; time_t failtime = 0; int sock = -1; + int retry_cnt = 0; + retry: sock = socket(AF_INET, SOCK_DGRAM, 0); if (sock < 0) { perror("socket"); @@ -248,7 +250,15 @@ notify(void) exit(1); } } else { + struct servent *se; (void) bindresvport(sock, (struct sockaddr_in *) &local_addr); + /* try to avoid known ports */ + se = getservbyport(local_addr.sin_port, "udp"); + if (se && retry_cnt < 100) { + retry_cnt++; + close(sock); + goto retry; + } } if (opt_max_retry)