/*
* HTTP address list routines for CUPS.
*
- * Copyright 2007-2016 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
- * These coded instructions, statements, and computer programs are the
- * property of Apple Inc. and are protected by Federal copyright
- * law. Distribution and use rights are outlined in the file "LICENSE.txt"
- * which should have been included with this file. If this file is
- * file is missing or damaged, see the license at "http://www.cups.org/".
- *
- * This file is subject to the Apple OS-Developed Software exception.
+ * Licensed under Apache License v2.0. See the file "LICENSE" for more information.
*/
/*
/*
* 'httpAddrConnect()' - Connect to any of the addresses in the list.
*
- * @since CUPS 1.2/macOS 10.5@
+ * @since CUPS 1.2/macOS 10.5@ @exclude all@
*/
http_addrlist_t * /* O - Connected address or NULL on failure */
int flags; /* Socket flags */
#endif /* !WIN32 */
int remaining; /* Remaining timeout */
- int i, /* Looping var */
+ int i, j, /* Looping vars */
nfds, /* Number of file descriptors */
fds[100], /* Socket file descriptors */
result; /* Result from select() or poll() */
DEBUG_printf(("pfds[%d].revents=%x\n", i, pfds[i].revents));
if (pfds[i].revents && !(pfds[i].revents & (POLLERR | POLLHUP)))
# else
- if (FD_ISSET(fds[i], &input) && !FD_ISSET(fds[i], &error))
+ if (FD_ISSET(fds[i], &input_set) && !FD_ISSET(fds[i], &error_set))
# endif /* HAVE_POLL */
{
*sock = fds[i];
if (!getpeername(fds[i], (struct sockaddr *)&peer, &len))
DEBUG_printf(("1httpAddrConnect2: Connected to %s:%d...", httpAddrString(&peer, temp, sizeof(temp)), httpAddrPort(&peer)));
# endif /* DEBUG */
+
+ break;
}
# ifdef HAVE_POLL
else if (pfds[i].revents & (POLLERR | POLLHUP))
# else
- else if (FD_ISSET(fds[i], &error))
+ else if (FD_ISSET(fds[i], &error_set))
# endif /* HAVE_POLL */
{
/*
}
if (connaddr)
+ {
+ /*
+ * Connected on one address, close all of the other sockets we have so
+ * far and return...
+ */
+
+ for (j = 0; j < i; j ++)
+ httpAddrClose(NULL, fds[j]);
+
+ for (j ++; j < nfds; j ++)
+ httpAddrClose(NULL, fds[j]);
+
return (connaddr);
+ }
}
#endif /* O_NONBLOCK */