diff --git a/src/invitation.c b/src/invitation.c
index 7a6a91b7..bd1fb940 100644
--- a/src/invitation.c
+++ b/src/invitation.c
@@ -42,6 +42,8 @@ int addressfamily = AF_UNSPEC;
 
 char *get_my_hostname() {
 	char *hostname = NULL;
+	char *port = NULL;
+	char *hostport = NULL;
 	char *name = get_my_name(false);
 	char *filename = NULL;
 
@@ -61,20 +63,21 @@ char *get_my_hostname() {
 				if(*q == '=')
 					q += 1 + strspn(q + 1, "\t ");
 				*p = 0;
-				if(strcasecmp(line, "Address"))
-					continue;
 				p = q + strcspn(q, "\t ");
 				if(*p)
 					*p++ = 0;
 				p += strspn(p, "\t ");
 				p[strcspn(p, "\t ")] = 0;
+				if(!port && !strcasecmp(line, "Port")) {
+					port = xstrdup(q);
+					continue;
+				}
+				if(strcasecmp(line, "Address"))
+					continue;
+				hostname = xstrdup(q);
 				if(*p) {
-					if(strchr(q, ':'))
-						xasprintf(&hostname, "[%s]:%s", q, p);
-					else
-						xasprintf(&hostname, "%s:%s", q, p);
-				} else {
-					hostname = xstrdup(q);
+					free(port);
+					port = xstrdup(p);
 				}
 				break;
 			}
@@ -82,10 +85,8 @@ char *get_my_hostname() {
 		}
 	}
 
-	if(hostname) {
-		free(filename);
-		return hostname;
-	}
+	if(hostname)
+		goto done;
 
 	// If that doesn't work, guess externally visible hostname
 	fprintf(stderr, "Trying to discover externally visible hostname...\n");
@@ -142,7 +143,7 @@ again:
 
 	if(!rstrip(line)) {
 		if(hostname)
-			goto done;
+			goto save;
 		else
 			goto again;
 	}
@@ -157,7 +158,7 @@ again:
 	free(hostname);
 	hostname = xstrdup(line);
 
-done:
+save:
 	if(filename) {
 		FILE *f = fopen(filename, "a");
 		if(f) {
@@ -166,10 +167,23 @@ done:
 		} else {
 			fprintf(stderr, "Could not append Address to %s: %s\n", filename, strerror(errno));
 		}
-		free(filename);
 	}
 
-	return hostname;
+done:
+	if(port) {
+		if(strchr(hostname, ':'))
+			xasprintf(&hostport, "[%s]:%s", hostname, port);
+		else
+			xasprintf(&hostport, "%s:%s", hostname, port);
+	} else {
+		hostport = hostname;
+		hostname = NULL;
+	}
+
+	free(hostname);
+	free(port);
+	free(filename);
+	return hostport;
 }
 
 static bool fcopy(FILE *out, const char *filename) {