[master] c1352b0b0 Use VSA_getsockname() - avoid sockaddr_storage
Nils Goroll
nils.goroll at uplex.de
Fri Jan 8 16:54:08 UTC 2021
commit c1352b0b0ece8028317c838751d9042a55347cd5
Author: Nils Goroll <nils.goroll at uplex.de>
Date: Fri Jan 8 16:17:52 2021 +0100
Use VSA_getsockname() - avoid sockaddr_storage
avoids an second getsockname() in vbp_write_proxy_v1()
avoids a memcpy() in VTCP_my_suckaddr()
diff --git a/bin/varnishd/cache/cache_backend_probe.c b/bin/varnishd/cache/cache_backend_probe.c
index ee9e0dbf2..d638a9f8e 100644
--- a/bin/varnishd/cache/cache_backend_probe.c
+++ b/bin/varnishd/cache/cache_backend_probe.c
@@ -251,20 +251,22 @@ vbp_write_proxy_v1(struct vbp_target *vt, int *sock)
char buf[105]; /* maximum size for a TCP6 PROXY line with null char */
char addr[VTCP_ADDRBUFSIZE];
char port[VTCP_PORTBUFSIZE];
- struct sockaddr_storage ss;
+ char vsabuf[vsa_suckaddr_len];
+ struct suckaddr *sua;
+ int proto;
struct vsb vsb;
- socklen_t l;
- VTCP_myname(*sock, addr, sizeof addr, port, sizeof port);
+ sua = VSA_getsockname(*sock, vsabuf, sizeof vsabuf);
+ AN(sua);
+ VTCP_name(sua, addr, sizeof addr, port, sizeof port);
AN(VSB_init(&vsb, buf, sizeof buf));
- l = sizeof ss;
- AZ(getsockname(*sock, (void *)&ss, &l));
- if (ss.ss_family == AF_INET || ss.ss_family == AF_INET6) {
+ proto = VSA_Get_Proto(sua);
+ if (proto == AF_INET || proto == AF_INET6)
VSB_printf(&vsb, "PROXY %s %s %s %s %s\r\n",
- ss.ss_family == AF_INET ? "TCP4" : "TCP6",
+ proto == AF_INET ? "TCP4" : "TCP6",
addr, addr, port, port);
- } else
+ else
VSB_cat(&vsb, "PROXY UNKNOWN\r\n");
AZ(VSB_finish(&vsb));
diff --git a/lib/libvarnish/vtcp.c b/lib/libvarnish/vtcp.c
index 90857c329..61b580e67 100644
--- a/lib/libvarnish/vtcp.c
+++ b/lib/libvarnish/vtcp.c
@@ -48,6 +48,7 @@
#include <stdio.h>
#include <string.h>
#include <unistd.h>
+#include <stdlib.h>
#include "vdef.h"
#include "vas.h"
@@ -105,12 +106,8 @@ VTCP_name(const struct suckaddr *addr, char *abuf, unsigned alen,
struct suckaddr *
VTCP_my_suckaddr(int sock)
{
- struct sockaddr_storage addr_s;
- socklen_t l;
-
- l = sizeof addr_s;
- AZ(getsockname(sock, (void *)&addr_s, &l));
- return (VSA_Malloc(&addr_s, l));
+ return (VSA_getsockname(sock,
+ malloc(vsa_suckaddr_len), vsa_suckaddr_len));
}
/*--------------------------------------------------------------------*/
@@ -118,12 +115,10 @@ VTCP_my_suckaddr(int sock)
void
VTCP_myname(int sock, char *abuf, unsigned alen, char *pbuf, unsigned plen)
{
- struct sockaddr_storage addr_s;
- socklen_t l;
+ char buf[vsa_suckaddr_len];
- l = sizeof addr_s;
- AZ(getsockname(sock, (void *)&addr_s, &l));
- vtcp_sa_to_ascii(&addr_s, l, abuf, alen, pbuf, plen);
+ VTCP_name(VSA_getsockname(sock, buf, sizeof buf),
+ abuf, alen, pbuf, plen);
}
/*--------------------------------------------------------------------*/
More information about the varnish-commit
mailing list