diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index 45410f64f91a165507dbd1ead37be8ec39d0d11e..dab0bd9d12bc6f1b2e1eda23ff7580259d65b88a 100644
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -4638,7 +4638,9 @@ static int create_addr(const char *peername, struct ast_channel *c, struct socka
 			return -1;
 		}
 		ast_sockaddr_to_sin(&sin_tmp, sin);
-		sin->sin_port = htons(IAX_DEFAULT_PORTNO);
+		if (sin->sin_port == 0) {
+			sin->sin_port = htons(IAX_DEFAULT_PORTNO);
+		}
 		/* use global iax prefs for unknown peer/user */
 		/* But move the calling channel's native codec to the top of the preference list */
 		memcpy(&ourprefs, &prefs, sizeof(ourprefs));