From fef978104cf134dc6629115456b27dfa2856ded7 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 29 Jun 2013 00:39:49 +0000 Subject: packaddr: simplify mog_sockaddr definition "struct sockaddr" turns out to be smaller than "struct sockaddr_in6", so we can avoid complicated casting and just add that to the union. We continue avoiding "struct sockaddr_storage", however, as it is unnecessarily large for our needs. --- accept_loop.c | 3 +-- inherit.c | 2 +- packaddr.h | 11 +---------- 3 files changed, 3 insertions(+), 13 deletions(-) diff --git a/accept_loop.c b/accept_loop.c index 874e6d7..c4779c9 100644 --- a/accept_loop.c +++ b/accept_loop.c @@ -90,12 +90,11 @@ void *mog_accept_loop(void *arg) union mog_sockaddr msa; for (;;) { - struct sockaddr *sa = mog_sockaddr_sa(&msa); socklen_t salen = (socklen_t)sizeof(msa); int client_fd; mog_thr_test_quit(); - client_fd = mog_accept_fn(accept_fd, sa, &salen); + client_fd = mog_accept_fn(accept_fd, &msa.sa, &salen); if (client_fd >= 0) ac->post_accept_fn(client_fd, ac->svc, &msa, salen); diff --git a/inherit.c b/inherit.c index d2f67f0..ad9f06b 100644 --- a/inherit.c +++ b/inherit.c @@ -38,7 +38,7 @@ static void register_listen_fd(int fd) struct listener *ins; struct mog_ni ni; struct mog_packaddr mpa; - struct sockaddr *sa = mog_sockaddr_sa(&tmp.msa); + struct sockaddr *sa = &tmp.msa.sa; tmp.len = (socklen_t)sizeof(tmp.msa); if (getsockname(fd, sa, &tmp.len) != 0) diff --git a/packaddr.h b/packaddr.h index fdfb9cb..de17378 100644 --- a/packaddr.h +++ b/packaddr.h @@ -3,22 +3,13 @@ * License: GPLv3 or later (see COPYING for details) */ -/* - * avoid sockaddr_storage since that bigger than we need - * This is meant to be cast to "struct sockaddr" via mog_sockaddr_sa - */ union mog_sockaddr { struct sockaddr_in in; struct sockaddr_in6 in6; + struct sockaddr sa; uint8_t bytes[sizeof(struct sockaddr_in6)]; }; -static inline struct sockaddr *mog_sockaddr_sa(union mog_sockaddr *msa) -{ - assert((void *)msa == (void *)&msa->bytes); - return (struct sockaddr *)msa; -} - /* this is the relevant part we may store in "struct mog_fd" */ struct mog_packaddr { sa_family_t sa_family; -- cgit v1.2.3-24-ge0c7