[PATCH] sockaddr.3type: BUGS: Document that libc should be fixed using a union

Alejandro Colomar alx.manpages@gmail.com
Mon Feb 6 14:11:10 GMT 2023


Hi Rich,

On 2/6/23 14:38, Rich Felker wrote:
> There is absolutely not any need to declare the union for application
> code calling the socket APIs. You declare whatever type you will be
> using. For binding or connecting a unix socket, sockaddr_un. For IPv6,
> sockaddr_in6. Etc. Then you cast the pointer to struct sockaddr * and
> pass it to the function.

Except that you may be using generic code that may use either of AF_UNIX, 
AF_INET, and AF_INET6.  A web server may very well use all the three.

> 
> But normally you don't use declared-type objects for this anyway. You
> use the struct sockaddr * obtained from getaddrinfo as an abstract
> pointer and never dereference it at all.

That's right.  Most of the time, we should be using getaddrinfo(3), which 
already provides the storage.  I don't know for sure if there are any cases that 
can't be rewritten to work that way.

However, there are some APIs that require you to allocate an object.  For 
example recvfrom(2).  How would you recommend using recvfrom(2), or is it some 
API to avoid?  Example of usage: 
<Mhttps://man7.org/tlpi/code/online/dist/sockets/id_echo_sv.c.html>.


Cheers,

Alex

-- 
<http://www.alejandro-colomar.es/>
GPG key fingerprint: A9348594CE31283A826FBDD8D57633D441E25BB5
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://gcc.gnu.org/pipermail/gcc/attachments/20230206/891af3e3/attachment.sig>


More information about the Gcc mailing list