Skip to content

Commit b2a7d20

Browse files
committed
attempt to clean up bind a little
1 parent 9334e1e commit b2a7d20

1 file changed

Lines changed: 20 additions & 22 deletions

File tree

src/core/connection.cpp

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -124,41 +124,39 @@ int connection_open_listener(struct scache_bind ibind) {
124124
}
125125

126126
//bind1
127-
sockaddr* tobind;
127+
union {
128+
struct sockaddr_in servaddr;
129+
struct sockaddr_in6 servaddr6;
130+
struct sockaddr_un unaddr;
131+
} tobind;
128132
int tobind_len;
129133
switch (ibind.af)
130134
{
131135
case AF_INET:
132-
struct sockaddr_in servaddr;
133-
tobind = (sockaddr*)&servaddr;
134-
tobind_len = sizeof(servaddr);
135-
memset(&servaddr, 0, sizeof(servaddr));
136-
servaddr.sin_family = ibind.af;
137-
memcpy(&servaddr.sin_addr.s_addr, &ibind.addr, sizeof(servaddr.sin_addr.s_addr));
138-
servaddr.sin_port = htons(ibind.port);
136+
tobind_len = sizeof(tobind.servaddr);
137+
memset(&tobind.servaddr, 0, sizeof(tobind.servaddr));
138+
tobind.servaddr.sin_family = ibind.af;
139+
memcpy(&tobind.servaddr.sin_addr.s_addr, &ibind.addr, sizeof(tobind.servaddr.sin_addr.s_addr));
140+
tobind.servaddr.sin_port = htons(ibind.port);
139141

140142
case AF_INET6:
141-
struct sockaddr_in6 servaddr6;
142-
tobind = (sockaddr*)&servaddr6;
143-
tobind_len = sizeof(servaddr6);
144-
memset(&servaddr6, 0, sizeof(servaddr6));
145-
servaddr6.sin6_family = ibind.af;
146-
memcpy(&servaddr6.sin6_addr.__in6_u, &ibind.addr, sizeof(servaddr6.sin6_addr.__in6_u));
147-
servaddr6.sin6_port = htons(ibind.port);
143+
tobind_len = sizeof(tobind.servaddr6);
144+
memset(&tobind.servaddr6, 0, sizeof(tobind.servaddr6));
145+
tobind.servaddr6.sin6_family = ibind.af;
146+
memcpy(&tobind.servaddr6.sin6_addr.__in6_u, &ibind.addr, sizeof(tobind.servaddr6.sin6_addr.__in6_u));
147+
tobind.servaddr6.sin6_port = htons(ibind.port);
148148

149149
case AF_UNIX:
150-
struct sockaddr_un unaddr;
151-
tobind = (sockaddr*)&unaddr;
152-
tobind_len = sizeof(unaddr);
153-
memset(&unaddr, 0, sizeof(unaddr));
154-
unaddr.sun_family = ibind.af;
155-
memcpy(&unaddr.sun_path, &ibind.addr, sizeof(unaddr.sun_path));
150+
tobind_len = sizeof(tobind.unaddr);
151+
memset(&tobind.unaddr, 0, sizeof(tobind.unaddr));
152+
tobind.unaddr.sun_family = ibind.af;
153+
memcpy(&tobind.unaddr.sun_path, &ibind.addr, sizeof(tobind.unaddr.sun_path));
156154

157155
default:
158156
FATAL("Unknown address family, cant bind");
159157
}
160158

161-
res = bind(listenfd, tobind, tobind_len);
159+
res = bind(listenfd, (sockaddr*)&tobind, tobind_len);
162160
if (res < 0){
163161
goto fail;
164162
}

0 commit comments

Comments
 (0)