Re: comm_connect_addr broke in squid3/trunk?

From: Henrik Nordstrom <henrik@dont-contact.us>
Date: Tue, 01 Apr 2008 12:35:40 +0200

tis 2008-04-01 klockan 22:59 +1300 skrev Amos Jeffries:
> I started out that way (assuming ss_len was absent but sin_len was
> present) but a header analysis proved the assumption wrong. sin_len also
> proves very absent from Debian Linux 2.6.25 headers.

Somehow I doubt that linux would change the socket ABI between 2.6.24
and 2.6.25 breaking all applications..

Additinally the relevant header is not really from the kernel but
glibc..

> OS that I know of and have tested the headers for all define a
> SOCKADDR_COMMON() macro for these types which neatly ensures they all
> have the same initial format within a given kernel. But not necessarily
> the same as other kernels.

Linux only has the family in the common part, with length being a family
specific member so you need to look in the actual definition of
sockaddr_in and sockaddr_in6 to find it.

family

----
length
data
FreeBSD has a both length and family in the common area
length
family
---
data
> AFAICT they are formally required to do so for sockaddr_in6. But not for 
> sockaddr_in or sockaddr_storage.
sockaddr_in must have a sin_length for BSD socket implementations, which
is the common implementation seen in most OS:es...
sockaddr_storage does not have much requirements other than it being
able to store all supported sockaddr formats and there at minimum being
a ss_family member telling the address format..
Regards
Henrik
Received on Tue Apr 01 2008 - 04:35:56 MDT

This archive was generated by hypermail 2.2.0 : Wed Apr 30 2008 - 12:00:07 MDT