r4450 - in trunk/varnish-cache: bin/varnishadm bin/varnishreplay include lib/libvarnish
phk at projects.linpro.no
phk at projects.linpro.no
Wed Jan 13 12:08:00 CET 2010
Author: phk
Date: 2010-01-13 12:08:00 +0100 (Wed, 13 Jan 2010)
New Revision: 4450
Modified:
trunk/varnish-cache/bin/varnishadm/varnishadm.c
trunk/varnish-cache/bin/varnishreplay/varnishreplay.c
trunk/varnish-cache/include/vss.h
trunk/varnish-cache/lib/libvarnish/vss.c
Log:
Make it possible to use VSS_connect() for nonblocking connects.
Modified: trunk/varnish-cache/bin/varnishadm/varnishadm.c
===================================================================
--- trunk/varnish-cache/bin/varnishadm/varnishadm.c 2010-01-13 10:58:23 UTC (rev 4449)
+++ trunk/varnish-cache/bin/varnishadm/varnishadm.c 2010-01-13 11:08:00 UTC (rev 4450)
@@ -104,7 +104,7 @@
exit(2);
}
- sock = VSS_connect(ta[0]);
+ sock = VSS_connect(ta[0], 0);
for (i = 0; i < n; ++i) {
free(ta[i]);
Modified: trunk/varnish-cache/bin/varnishreplay/varnishreplay.c
===================================================================
--- trunk/varnish-cache/bin/varnishreplay/varnishreplay.c 2010-01-13 10:58:23 UTC (rev 4449)
+++ trunk/varnish-cache/bin/varnishreplay/varnishreplay.c 2010-01-13 11:08:00 UTC (rev 4450)
@@ -581,7 +581,8 @@
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");
}
Modified: trunk/varnish-cache/include/vss.h
===================================================================
--- trunk/varnish-cache/include/vss.h 2010-01-13 10:58:23 UTC (rev 4449)
+++ trunk/varnish-cache/include/vss.h 2010-01-13 11:08:00 UTC (rev 4450)
@@ -34,5 +34,5 @@
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);
Modified: trunk/varnish-cache/lib/libvarnish/vss.c
===================================================================
--- trunk/varnish-cache/lib/libvarnish/vss.c 2010-01-13 10:58:23 UTC (rev 4449)
+++ trunk/varnish-cache/lib/libvarnish/vss.c 2010-01-13 11:08:00 UTC (rev 4450)
@@ -239,9 +239,9 @@
* 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 @@
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 @@
return (-1);
}
for (n = 0; n < nvaddr; n++) {
- retval = VSS_connect(vaddr[n]);
+ retval = VSS_connect(vaddr[n], 0);
if (retval >= 0)
break;
}
More information about the varnish-commit
mailing list