- /* connect to the hddtemp daemon */
- if (connect (sock, (const struct sockaddr *) &addr, sizeof (addr)))
+ fd = -1;
+ for (ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next)
+ {
+ /* create our socket descriptor */
+ if ((fd = socket (ai_ptr->ai_family, ai_ptr->ai_socktype, ai_ptr->ai_protocol)) < 0)
+ {
+ char errbuf[1024];
+ ERROR ("hddtemp: socket: %s",
+ sstrerror (errno, errbuf, sizeof (errbuf)));
+ continue;
+ }
+
+ /* connect to the hddtemp daemon */
+ if (connect (fd, (struct sockaddr *) ai_ptr->ai_addr, ai_ptr->ai_addrlen))
+ {
+ char errbuf[1024];
+ DEBUG ("hddtemp: connect (%s, %s): %s", host, port,
+ sstrerror (errno, errbuf, sizeof (errbuf)));
+ close (fd);
+ fd = -1;
+ continue;
+ }
+
+ /* A socket could be opened and connecting succeeded. We're
+ * done. */
+ break;
+ }
+
+ freeaddrinfo (ai_list);
+
+ if (fd < 0)