Everywhere I look, I see the following piece of code:
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = ip;
In C++, the same idea is usually expressed as
sockaddr_in addr = {}; // unneccesary(?) value-initialzation
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = ip;
Yet nowhere I look (in terms of official documentation) do I see any requirement to zero out the structure before setting those members! Yes, usually BSD sockets implementations do have a sin_zero
member defined for sockaddr_in
, but they always say the member is needed for padding, to align the size of sockaddr_in
with sockaddr
. And they never request one to put any specific contents into it.
Is there any real, documentation proven need to zero out the struct?
P.S.
Before you VTC the question as a duplicate of one of several SO questions regarding memset
on sockaddr_in
, please make sure the question your are suggesting as a duplicate has any links to official documentation rather than just speculation on 'initializing of unused members just in case'.