diff -Nur ntp-4.2.8p12.bak/ntpdate/ntpdate.c ntp-4.2.8p12/ntpdate/ntpdate.c
--- ntp-4.2.8p12.bak/ntpdate/ntpdate.c	2018-08-14 07:51:07.000000000 -0400
+++ ntp-4.2.8p12/ntpdate/ntpdate.c	2019-01-22 20:20:02.484000000 -0500
@@ -172,6 +172,7 @@
  * Counter for keeping track of completed servers
  */
 int complete_servers = 0;
+int bind_port = 0;
 
 /*
  * File of encryption keys
@@ -346,7 +347,7 @@
 	/*
 	 * Decode argument list
 	 */
-	while ((c = ntp_getopt(argc, argv, "46a:bBde:k:o:p:qst:uv")) != EOF)
+	while ((c = ntp_getopt(argc, argv, "46a:bBdr:e:k:o:p:qst:uv")) != EOF)
 		switch (c)
 		{
 		case '4':
@@ -371,6 +372,9 @@
 		case 'd':
 			++debug;
 			break;
+		case 'r':
+			bind_port = atoi(ntp_optarg);
+			break;
 		case 'e':
 			if (!atolfp(ntp_optarg, &tmp)
 			|| tmp.l_ui != 0) {
@@ -432,7 +436,7 @@
 
 	if (errflg) {
 		(void) fprintf(stderr,
-		    "usage: %s [-46bBdqsuv] [-a key#] [-e delay] [-k file] [-p samples] [-o version#] [-t timeo] server ...\n",
+		    "usage: %s [-46bBdqsuv] [-a key#] [-e delay] [-k file] [-p samples] [-o version#] [-t timeo] [-r port] server ...\n",
 		    progname);
 		exit(2);
 	}
@@ -1774,6 +1778,21 @@
 				exit(1);
 			}
 		}
+		else if (debug && bind_port > 0) {
+			((struct sockaddr_in *)(res->ai_addr))->sin_port = htons(bind_port);
+			if (bind(fd[nbsock], res->ai_addr,
+				SOCKLEN((sockaddr_u *)res->ai_addr)) < 0) {
+#ifndef SYS_WINNT
+				if (errno == EADDRINUSE)
+#else
+				if (WSAGetLastError() == WSAEADDRINUSE)
+#endif /* SYS_WINNT */
+					msyslog(LOG_ERR, "the NTP socket is in use, exiting");
+				else
+					msyslog(LOG_ERR, "bind() fails: %m");
+				exit(1);
+			}
+		} 
 
 #ifdef HAVE_POLL_H
 		fdmask[nbsock].fd = fd[nbsock];
