I am doing this right now but
struct sockaddr_in my_addr;
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MYPORT);
inet_aton("10.12.110.57", &(my_addr.sin_addr));
memset(&(my_addr.sin_zero), '\0', 8);
can I do this? Will this also zero the rest of the struct? i.e.sin_zero[8]
struct sockaddr_in my_addr = {AF_INET, htons(MYPORT), 0};
// Or
struct sockaddr_in my_addr = {AF_INET, htons(MYPORT), {0} };
Yes, it is correct. Of course you could just write 0
which is less verbose than '\0'
. Also you could replace 8
by sizeof my_addr.sin_zero
to make sure you are setting the right number of bytes.
A tidier way is:
struct sockaddr_in my_addr = { 0 };
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MYPORT);
If you want to use a brace-enclosed initializer for the whole thing then I'd suggest using designated initializers for readability. Also this may or may not be possible, as in some situations braced initializers have to be constant expressions and it's not clear whether MYPORT is a variable or not.