From Stack Overflow
*** nfsd.c-original Sun Jun 22 13:11:33 2003
--- nfsd.c Fri Jul 7 14:09:41 2006
***************
*** 368,373 ****
--- 368,379 ----
syslog(LOG_ERR, "can't create udp socket");
exit(1);
}
+ if (setsockopt(sock,
+ SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on)) < 0)
+ syslog(LOG_ERR, "setsockopt SO_REUSEADDR: %m");
+ if (setsockopt(sock,
+ SOL_SOCKET, SO_REUSEPORT, (char *)&on, sizeof(on)) < 0)
+ syslog(LOG_ERR, "setsockopt SO_REUSEADDR: %m");
inetaddr.sin_family = AF_INET;
inetaddr.sin_addr.s_addr = INADDR_ANY;
inetaddr.sin_port = htons(NFS_PORT);
***************
*** 445,450 ****
--- 451,459 ----
if (setsockopt(tcpsock,
SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on)) < 0)
syslog(LOG_ERR, "setsockopt SO_REUSEADDR: %m");
+ if (setsockopt(tcpsock,
+ SOL_SOCKET, SO_REUSEPORT, (char *)&on, sizeof(on)) < 0)
+ syslog(LOG_ERR, "setsockopt SO_REUSEADDR: %m");
inetaddr.sin_family = AF_INET;
inetaddr.sin_addr.s_addr = INADDR_ANY;
inetaddr.sin_port = htons(NFS_PORT);
***************
*** 478,483 ****
--- 487,495 ----
if (setsockopt(tp4sock,
SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on)) < 0)
syslog(LOG_ERR, "setsockopt SO_REUSEADDR: %m");
+ if (setsockopt(tp4sock,
+ SOL_SOCKET, SO_REUSEPORT, (char *)&on, sizeof(on)) < 0)
+ syslog(LOG_ERR, "setsockopt SO_REUSEADDR: %m");
memset(&isoaddr, 0, sizeof(isoaddr));
isoaddr.siso_family = AF_ISO;
isoaddr.siso_tlen = 2;
***************
*** 517,522 ****
--- 529,537 ----
if (setsockopt(tpipsock,
SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on)) < 0)
syslog(LOG_ERR, "setsockopt SO_REUSEADDR: %m");
+ if (setsockopt(tpipsock,
+ SOL_SOCKET, SO_REUSEPORT, (char *)&on, sizeof(on)) < 0)
+ syslog(LOG_ERR, "setsockopt SO_REUSEADDR: %m");
inetaddr.sin_family = AF_INET;
inetaddr.sin_addr.s_addr = INADDR_ANY;
inetaddr.sin_port = htons(NFS_PORT);