diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index fb3581eb5168733b8aff144e5e4e25a3a0948243..078cf102f10d9c3264a0001914e529157961536f 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -3934,23 +3934,27 @@ static void ast_sip_ouraddrfor(const struct ast_sockaddr *them, struct ast_socka
 		/* no remapping, but we bind to a specific address, so use it. */
 		switch (p->socket.type) {
 		case AST_TRANSPORT_TCP:
-			if (!ast_sockaddr_is_any(&sip_tcp_desc.local_address)) {
-				ast_sockaddr_copy(us,
-						  &sip_tcp_desc.local_address);
-			} else {
-				ast_sockaddr_set_port(us,
-						      ast_sockaddr_port(&sip_tcp_desc.local_address));
-			}
-			break;
+			if (!ast_sockaddr_isnull(&sip_tcp_desc.local_address)) {
+				if (!ast_sockaddr_is_any(&sip_tcp_desc.local_address)) {
+					ast_sockaddr_copy(us,
+							  &sip_tcp_desc.local_address);
+				} else {
+					ast_sockaddr_set_port(us,
+					  ast_sockaddr_port(&sip_tcp_desc.local_address));
+				}
+				break;
+			} /* fall through on purpose */
 		case AST_TRANSPORT_TLS:
-			if (!ast_sockaddr_is_any(&sip_tls_desc.local_address)) {
-				ast_sockaddr_copy(us,
-						  &sip_tls_desc.local_address);
-			} else {
-				ast_sockaddr_set_port(us,
-						      ast_sockaddr_port(&sip_tls_desc.local_address));
-			}
-			break;
+			if (!ast_sockaddr_isnull(&sip_tls_desc.local_address)) {
+				if (!ast_sockaddr_is_any(&sip_tls_desc.local_address)) {
+					ast_sockaddr_copy(us,
+							  &sip_tls_desc.local_address);
+				} else {
+					ast_sockaddr_set_port(us,
+					  ast_sockaddr_port(&sip_tls_desc.local_address));
+				}
+				break;
+			} /* fall through on purpose */
 		case AST_TRANSPORT_UDP:
 			/* fall through on purpose */
 		default:
@@ -16249,8 +16253,15 @@ static int transmit_register(struct sip_registry *r, int sipmethod, const char *
 		/* Set transport and port so the correct contact is built */
 		set_socket_transport(&p->socket, r->transport);
 		if (r->transport == AST_TRANSPORT_TLS || r->transport == AST_TRANSPORT_TCP) {
-			p->socket.port =
-			    htons(ast_sockaddr_port(&sip_tcp_desc.local_address));
+			if (ast_sockaddr_isnull(&sip_tcp_desc.local_address)) {
+				ast_log(LOG_ERROR,
+				    "TCP/TLS clients without server were not tested.\n");
+				ast_log(LOG_ERROR,
+				    "Please, follow-up and report at issue 28798.\n");
+			} else {
+				p->socket.port =
+				    htons(ast_sockaddr_port(&sip_tcp_desc.local_address));
+			}
 		}
 
 		/*