cache warming: close the socket when done.

Also handle errors in open(), don't try to use
a non-existent socket.

Fixes b/32677877

Change-Id: I075c96d2744bee44fd1fdce4db3b52e6c63ca8b2
diff --git a/src/forward.c b/src/forward.c
index 829f9d2..c9d1eb8 100644
--- a/src/forward.c
+++ b/src/forward.c
@@ -1315,18 +1315,22 @@
 	  	access("/config/experiments/CacheWarming.active", R_OK) == 0)
 		{
 		  int sock;
-		  if ((sock = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0)
+		  if ((sock = socket(AF_UNIX, SOCK_DGRAM, 0)) >= 0)
+			{
+			  struct sockaddr_un server_address = {AF_UNIX, "/tmp/dns_query_log_socket"};
+			  char msg[128];
+			  snprintf(msg, sizeof(msg), "%lu %s", now, daemon->namebuff);
+			  if (sendto(sock, msg, strlen(msg), 0, (struct sockaddr *)&server_address,
+			      sizeof(server_address)) < 0)
+				{
+				  my_syslog(LOG_ERR, "failed to send message on query log socket: %s", strerror(errno));
+				}
+			  close(sock);
+			}
+		  else
 			{
 			  my_syslog(LOG_ERR, "failed to create query log socket: %s", strerror(errno));
 			}
-		  struct sockaddr_un server_address = {AF_UNIX, "/tmp/dns_query_log_socket"};
-		  char msg[128];
-		  snprintf(msg, sizeof(msg), "%lu %s", now, daemon->namebuff);
-		  if (sendto(sock, msg, strlen(msg), 0, (struct sockaddr *)&server_address,
-					sizeof(server_address)) < 0)
-			{
-			  my_syslog(LOG_ERR, "failed to send message on query log socket: %s", strerror(errno));
-			}
 		}
 #ifdef HAVE_AUTH
       /* find queries for zones we're authoritative for, and answer them directly */