Re: getsockname() semantics

From: Date: Sat, 23 Sep 2000 19:14:50 +0000
Subject: Re: getsockname() semantics
References: 1  Groups: php.dev 
Request: Send a blank email to php-dev+get-33708@lists.php.net to get a copy of this message
On Fri, 22 Sep 2000, Stig Venaas wrote: > In some situations it would be nice to have a way to determine the > domain of an existing socket. On all implementations I've checked > getsockname() will for PF_INET and PF_INET6, return the respective > family in the sockaddr structure, even when the socket is not bound > to a local name (calling getsockname() right after socket()). This > is not the case for PF_LOCAL. > > I've seen several examples where people use this, even though it is > not specified in any standard AFAIK. > > > In the July 31 draft it says: > > If the socket has not been bound to a local name, the value stored > in the object pointed to by address is unspecified. > > > Would it be possible to change this? If not, is there some other > portable way to determine the domain? > > I haven't followed this list and the groups work all that long, > sorry if this is not the right way or place to bring this up. > > Stig > > -- > Stig Venaas > UNINETT > This reminds me of some ugliness in the sockets' extension code. The code uses getsockname() to determine the address family of the socket. It passes a pointer to a sockaddr structure to getsockname() under the assumption that the sockaddr structure is large enough to accommodate all supported protocol-specific address structures. This assumption is false. The right way to do this is to use the sockaddr_storage structure. If that structure is not available, fall back to the sockaddr structure for compatibility with existing implementations. - Sascha

« previous php.dev (#33708) next »