diff --git a/src/network/netconnect.cpp b/src/network/netconnect.cpp
index de3686220..e484ce21f 100644
--- a/src/network/netconnect.cpp
+++ b/src/network/netconnect.cpp
@@ -1446,18 +1446,26 @@ static int service_callback(int sock, const struct sockaddr* from, size_t addrle
 							uint16_t query_id, uint16_t rtype, uint16_t rclass, uint32_t ttl, const void* data,
 							size_t size, size_t name_offset, size_t name_length, size_t record_offset,
 							size_t record_length, void* user_data) {
-	if (rtype == MDNS_RECORDTYPE_A && entry == MDNS_ENTRYTYPE_QUESTION) {
-		size_t cap = 2048;
-		void *buffer = malloc(cap);
-		unsigned long ips[20];
-		int numIps = NetSocketAddr(ips, 20);
-		for (int i = 0; i < numIps; i++) {
-			mdns_query_answer(sock, from, addrlen, buffer, cap, query_id,
-							  GameName.c_str(), GameName.size(),
-							  CNetworkParameter::Instance.localHost.c_str(),
-							  CNetworkParameter::Instance.localHost.size(),
-							  ips[i], NULL, CNetworkParameter::Instance.localPort,
-							  NULL, 0);
+	if (rtype == MDNS_RECORDTYPE_PTR && entry == MDNS_ENTRYTYPE_QUESTION) {
+		char namebuffer[256];
+		mdns_string_t service = mdns_record_parse_ptr(data, size, record_offset, record_length, namebuffer, sizeof(namebuffer));
+		std::string offeredService = GameName;
+		if (strncmp(offeredService.c_str(), service.str, offeredService.size()) == 0) {
+			uint16_t unicast = (rclass & MDNS_UNICAST_RESPONSE);
+			std::string hostname = NetGetHostname();
+			if (!unicast) {
+				addrlen = 0;
+			}
+			char buffer[256];
+			unsigned long ips[20];
+			int numIps = NetSocketAddr(ips, 20);
+			for (int i = 0; i < numIps; i++) {
+				mdns_query_answer(sock, from, addrlen, buffer, sizeof(buffer), query_id,
+								  offeredService.c_str(), offeredService.size(),
+								  hostname.c_str(), hostname.size(),
+								  ips[i], NULL, CNetworkParameter::Instance.localPort,
+								  NULL, 0);
+			}
 		}
 	}
 	return 0;
@@ -1952,7 +1960,7 @@ static int CclNetworkDiscoverServers(lua_State *l)
 		if (mDNS_querySocket == -1) {
 			mDNS_querySocket = mdns_socket_open_ipv4(NULL);
 		}
-		mDNS_queryId = mdns_query_send(mDNS_querySocket, MDNS_RECORDTYPE_A,
+		mDNS_queryId = mdns_query_send(mDNS_querySocket, MDNS_RECORDTYPE_PTR,
 									   GameName.c_str(), GameName.size(),
 									   buffer, cap, 0);
 		int responses = mdns_query_recv(mDNS_querySocket, buffer, cap, query_callback, l, mDNS_queryId);