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