Commit c6b7d8b4 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Make it possible to use VSS_connect() for nonblocking connects.



git-svn-id: http://www.varnish-cache.org/svn/trunk/varnish-cache@4450 d4fa192b-c00b-0410-8231-f00ffab90ce4
parent 588fefb1
......@@ -104,7 +104,7 @@ telnet_mgt(const char *T_arg, int argc, char *argv[])
exit(2);
}
sock = VSS_connect(ta[0]);
sock = VSS_connect(ta[0], 0);
for (i = 0; i < n; ++i) {
free(ta[i]);
......
......@@ -581,7 +581,8 @@ replay_thread(void *arg)
for (;;) {
thread_log(1, 0, "sleeping before connect...");
usleep(1000 * (thr->fd % 3001));
if ((thr->sock = VSS_connect(addr_info)) >= 0)
thr->sock = VSS_connect(addr_info, 0);
if (thr->sock >= 0)
break;
thread_log(0, errno, "connect failed");
}
......
......@@ -34,5 +34,5 @@ int VSS_parse(const char *str, char **addr, char **port);
int VSS_resolve(const char *addr, const char *port, struct vss_addr ***ta);
int VSS_bind(const struct vss_addr *addr);
int VSS_listen(const struct vss_addr *addr, int depth);
int VSS_connect(const struct vss_addr *addr);
int VSS_connect(const struct vss_addr *addr, int nonblock);
int VSS_open(const char *str);
......@@ -239,9 +239,9 @@ VSS_listen(const struct vss_addr *va, int depth)
* Return the socket.
*/
int
VSS_connect(const struct vss_addr *va)
VSS_connect(const struct vss_addr *va, int nonblock)
{
int sd;
int sd, i;
sd = socket(va->va_family, va->va_socktype, va->va_protocol);
if (sd < 0) {
......@@ -249,12 +249,14 @@ VSS_connect(const struct vss_addr *va)
perror("socket()");
return (-1);
}
if (connect(sd, &va->va_addr.sa, va->va_addrlen) != 0) {
perror("connect()");
(void)close(sd);
return (-1);
}
return (sd);
if (nonblock)
TCP_nonblocking(sd);
i = connect(sd, &va->va_addr.sa, va->va_addrlen);
if (i == 0 || (nonblock && errno == EINPROGRESS))
return (sd);
perror("connect()");
(void)close(sd);
return (-1);
}
/*
......@@ -279,7 +281,7 @@ VSS_open(const char *str)
return (-1);
}
for (n = 0; n < nvaddr; n++) {
retval = VSS_connect(vaddr[n]);
retval = VSS_connect(vaddr[n], 0);
if (retval >= 0)
break;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment