X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FProtocols%2FBSDSocketAddress.hh;h=ec3edfdf090513e43a38ad27739eb55d120b2536;hb=c38ac1eba5f76a57fb186045c65bc1701833f2cb;hp=1e7d1e7737983cd81094594714a4de92d46ff578;hpb=7baaacae27c02c86ceda5c7ee41d3172d1e23ffa;p=senf.git diff --git a/Socket/Protocols/BSDSocketAddress.hh b/Socket/Protocols/BSDSocketAddress.hh index 1e7d1e7..ec3edfd 100644 --- a/Socket/Protocols/BSDSocketAddress.hh +++ b/Socket/Protocols/BSDSocketAddress.hh @@ -23,10 +23,12 @@ /** \file \brief BSDSocketAddress public header */ -#ifndef HH_BSDSocketAddress_ -#define HH_BSDSocketAddress_ 1 +#ifndef HH_SENF_Socket_Protocols_BSDSocketAddress_ +#define HH_SENF_Socket_Protocols_BSDSocketAddress_ 1 // Custom includes +#include +#include #include "../../Utils/safe_bool.hh" #include #include @@ -112,8 +114,16 @@ namespace senf { void socklen(socklen_t len); private: - - socklen_t len_; + + // The following incantation is needed to fix the alignment of the sockaddr data members + // which will be added by the derived classes later: The alignment must be forced + // to coincide with the struct sockaddr_storage alignment (which must have the largest + // alignment of all sockaddr types). + union { + socklen_t len_; + boost::type_with_alignment::value> a_; + char _b[boost::alignment_of::value]; + }; }; /** \brief Safe socket address down-cast