about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2013-06-29 00:39:49 +0000
committerEric Wong <normalperson@yhbt.net>2013-07-10 00:55:59 +0000
commitfef978104cf134dc6629115456b27dfa2856ded7 (patch)
tree653b137bea3511b6741e9612894459462226398c
parent71849ca64134b0cfa197fc4b1ce8fc10c7fb5d98 (diff)
downloadcmogstored-fef978104cf134dc6629115456b27dfa2856ded7.tar.gz
"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.
-rw-r--r--accept_loop.c3
-rw-r--r--inherit.c2
-rw-r--r--packaddr.h11
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;