]> err.no Git - varnish/commitdiff
Add a VSS_bind() function, using the meat of VSS_listen()
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Mon, 9 Jun 2008 13:01:27 +0000 (13:01 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Mon, 9 Jun 2008 13:01:27 +0000 (13:01 +0000)
git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@2657 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/include/vss.h
varnish-cache/lib/libvarnish/vss.c

index 77e52d1b232d8964cb623de7937a9e4d5bb98225..49abeeac9c3782394a53a163758f19d84e09334e 100644 (file)
@@ -32,5 +32,6 @@ struct vss_addr;
 
 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);
index 2bfff35e8929721126e1399b53914f78a573930e..2f9c201bf6e59d8f0e5e6dc0b446c836ace8b1fb 100644 (file)
@@ -165,14 +165,15 @@ VSS_resolve(const char *addr, const char *port, struct vss_addr ***vap)
 }
 
 /*
- * Given a struct vss_addr, open a socket of the appropriate type, bind it
- * to the requested address, and start listening.
+ * Given a struct vss_addr, open a socket of the appropriate type, and bind
+ * it to the requested address.
  *
  * If the address is an IPv6 address, the IPV6_V6ONLY option is set to
  * avoid conflicts between INADDR_ANY and IN6ADDR_ANY.
  */
+
 int
-VSS_listen(const struct vss_addr *va, int depth)
+VSS_bind(const struct vss_addr *va)
 {
        int sd, val;
 
@@ -202,10 +203,28 @@ VSS_listen(const struct vss_addr *va, int depth)
                (void)close(sd);
                return (-1);
        }
-       if (listen(sd, depth) != 0) {
-               perror("listen()");
-               (void)close(sd);
-               return (-1);
+       return (sd);
+}
+
+/*
+ * Given a struct vss_addr, open a socket of the appropriate type, bind it
+ * to the requested address, and start listening.
+ *
+ * If the address is an IPv6 address, the IPV6_V6ONLY option is set to
+ * avoid conflicts between INADDR_ANY and IN6ADDR_ANY.
+ */
+int
+VSS_listen(const struct vss_addr *va, int depth)
+{
+       int sd;
+
+       sd = VSS_bind(va);
+       if (sd >= 0)  {
+               if (listen(sd, depth) != 0) {
+                       perror("listen()");
+                       (void)close(sd);
+                       return (-1);
+               }
        }
        return (sd);
 }