From 5028f70346c298f8285629d1794d9cf4c3aa0a80 Mon Sep 17 00:00:00 2001 From: phk Date: Mon, 10 Jul 2006 11:24:37 +0000 Subject: [PATCH] Move sockaddr->ascii conversion to tcp.c shmlog both ends of backend connections. git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@404 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- varnish-cache/bin/varnishd/cache.h | 4 +-- varnish-cache/bin/varnishd/cache_acceptor.c | 13 ++------ varnish-cache/bin/varnishd/cache_backend.c | 14 +++++++-- varnish-cache/bin/varnishd/common.h | 11 +++++++ varnish-cache/bin/varnishd/tcp.c | 34 +++++++++++++++++++++ 5 files changed, 59 insertions(+), 17 deletions(-) diff --git a/varnish-cache/bin/varnishd/cache.h b/varnish-cache/bin/varnishd/cache.h index b22a3d46..ab0bc0e3 100644 --- a/varnish-cache/bin/varnishd/cache.h +++ b/varnish-cache/bin/varnishd/cache.h @@ -11,8 +11,6 @@ #include "vcl_returns.h" #include "common.h" -#define VCA_ADDRBUFSIZE 64 /* Sizeof ascii network address */ - struct event_base; struct cli; struct sbuf; @@ -133,7 +131,7 @@ struct sess { unsigned xid; /* formatted ascii client address */ - char addr[VCA_ADDRBUFSIZE]; + char addr[TCP_ADDRBUFFSIZE]; /* HTTP request */ struct http *http; diff --git a/varnish-cache/bin/varnishd/cache_acceptor.c b/varnish-cache/bin/varnishd/cache_acceptor.c index 1779acb0..329f10e2 100644 --- a/varnish-cache/bin/varnishd/cache_acceptor.c +++ b/varnish-cache/bin/varnishd/cache_acceptor.c @@ -210,9 +210,8 @@ static void accept_f(int fd, short event __unused, void *arg __unused) { socklen_t l; - struct sockaddr addr[2]; + struct sockaddr addr[2]; /* XXX: IPv6 hack */ struct sess *sp; - char port[NI_MAXSERV]; int i; struct linger linger; @@ -238,15 +237,7 @@ accept_f(int fd, short event __unused, void *arg __unused) AZ(setsockopt(sp->fd, SOL_SOCKET, SO_LINGER, &linger, sizeof linger)); #endif - i = getnameinfo(addr, l, - sp->addr, VCA_ADDRBUFSIZE, - port, sizeof port, NI_NUMERICHOST | NI_NUMERICSERV); - if (i) { - printf("getnameinfo = %d %s\n", i, - gai_strerror(i)); - } - strlcat(sp->addr, " ", VCA_ADDRBUFSIZE); - strlcat(sp->addr, port, VCA_ADDRBUFSIZE); + TCP_name(addr, l, sp->addr); VSL(SLT_SessionOpen, sp->fd, "%s", sp->addr); time(&sp->t_resp); TAILQ_INSERT_TAIL(&sesshead, sp, list); diff --git a/varnish-cache/bin/varnishd/cache_backend.c b/varnish-cache/bin/varnishd/cache_backend.c index 45f2aaa5..792afd69 100644 --- a/varnish-cache/bin/varnishd/cache_backend.c +++ b/varnish-cache/bin/varnishd/cache_backend.c @@ -106,6 +106,7 @@ connect_to_backend(struct vbe_conn *vc, struct backend *bp) { struct addrinfo *res, *res0, hint; int error, s; + char buf[TCP_ADDRBUFFSIZE * 2 + 1], *p; assert(bp != NULL); assert(bp->hostname != NULL); @@ -132,15 +133,22 @@ connect_to_backend(struct vbe_conn *vc, struct backend *bp) continue; } error = connect(s, res0->ai_addr, res0->ai_addrlen); - if (!error) + if (!error) break; VSL(SLT_Debug, 0, "Connect errno=%d", errno); close(s); s = -1; } while ((res0 = res0->ai_next) != NULL); - freeaddrinfo(res); vc->fd = s; - VSL(SLT_BackendOpen, vc->fd, ""); + if (s >= 0) { + TCP_myname(s, buf); + p = strchr(buf, '\0'); + assert(p != NULL); + *p++ = ' '; + TCP_name(res0->ai_addr, res0->ai_addrlen, p); + VSL(SLT_BackendOpen, vc->fd, buf); + } + freeaddrinfo(res); return; } diff --git a/varnish-cache/bin/varnishd/common.h b/varnish-cache/bin/varnishd/common.h index f0cb1972..b732cc76 100644 --- a/varnish-cache/bin/varnishd/common.h +++ b/varnish-cache/bin/varnishd/common.h @@ -2,5 +2,16 @@ * $Id$ */ +struct sockaddr; + +/* shmlog.c */ void VSL_MgtInit(const char *fn, unsigned size); extern struct varnish_stats *VSL_stats; + +/* tcp.c */ +#define TCP_ADDRBUFFSIZE 64 /* Sizeof ascii representation */ + +void TCP_name(struct sockaddr *addr, unsigned l, char *buf); +void TCP_myname(int sock, char *buf); + + diff --git a/varnish-cache/bin/varnishd/tcp.c b/varnish-cache/bin/varnishd/tcp.c index becf59d2..42cbc97c 100644 --- a/varnish-cache/bin/varnishd/tcp.c +++ b/varnish-cache/bin/varnishd/tcp.c @@ -14,6 +14,40 @@ #include "mgt.h" #include "libvarnish.h" +/*--------------------------------------------------------------------*/ + +void +TCP_name(struct sockaddr *addr, unsigned l, char *buf) +{ + int i; + char port[NI_MAXSERV]; + + i = getnameinfo(addr, l, buf, TCP_ADDRBUFFSIZE, + port, sizeof port, NI_NUMERICHOST | NI_NUMERICSERV); + if (i) { + printf("getnameinfo = %d %s\n", i, gai_strerror(i)); + strcpy(buf, "Conversion:Failed"); + return; + } + strlcat(buf, " ", TCP_ADDRBUFFSIZE); + strlcat(buf, port, TCP_ADDRBUFFSIZE); +} + +/*--------------------------------------------------------------------*/ + +void +TCP_myname(int sock, char *buf) +{ + struct sockaddr addr[2]; /* XXX: IPv6 hack */ + socklen_t l; + + l = sizeof addr; + AZ(getsockname(sock, addr, &l)); + TCP_name(addr, l, buf); +} + +/*--------------------------------------------------------------------*/ + static void accept_filter(int fd) { -- 2.39.5