diff -Naur openvpn-2.0.9-orig/init.c openvpn-2.0.9-new/init.c
--- openvpn-2.0.9-orig/init.c	2019-08-30 14:55:45.133224000 -0700
+++ openvpn-2.0.9-new/init.c	2019-09-03 21:35:05.657139000 -0700
@@ -65,6 +65,8 @@
 #define SRVFIXEDSZ      6
 #define ANFIXEDSZ       2
 
+extern int override_port;
+
 typedef struct _srv_host_s {
     char                name[MAXHOSTNAMELEN];
     unsigned int        ip_addr;
@@ -691,7 +693,11 @@
         struct in_addr cp;
         if (inet_aton(opl->array[i].hostname, &cp)) {
           l->array[j].hostname=opl->array[i].hostname;
-          l->array[j].port=opl->array[i].port;
+	  if (override_port != 0) {
+	    l->array[j].port=override_port;
+	  } else {
+	    l->array[j].port=opl->array[i].port;
+	  }
           l->len++;
           j++;
           //msg(M_INFO, ">>>> store ip address <%s:%d>\n", opl->array[i].hostname, opl->array[i].port);
@@ -734,7 +740,11 @@
                   memcpy (l->array[j].hostname, p->name, strlen(p->name)+1);
                   //msg(M_INFO, ">>>> SRV lookup returns without ipaddress (%s)\n", p->name);
               }
-              l->array[j].port=p->port;
+	      if (override_port != 0) {
+		l->array[j].port=override_port;
+	      } else {
+		l->array[j].port=p->port;
+	      }
               l->len++;
               //msg(M_INFO, ">>>> store SRV record (%s:%d) to 'remote_list'\n", l->array[j].hostname, l->array[j].port);
               j++;
diff -Naur openvpn-2.0.9-orig/options.c openvpn-2.0.9-new/options.c
--- openvpn-2.0.9-orig/options.c	2019-08-30 14:55:45.083229000 -0700
+++ openvpn-2.0.9-new/options.c	2019-09-03 21:35:29.005822000 -0700
@@ -520,6 +520,9 @@
  * Any option not explicitly set here
  * will be set to 0.
  */
+
+int override_port = 0;
+
 void
 init_options (struct options *o)
 {
@@ -3285,6 +3288,7 @@
 	}
       options->port_option_used = true;
       options->remote_port = port;
+      override_port = options->remote_port;
     }
   else if (streq (p[0], "nobind"))
     {
