Why we use memset to fill the structure with value 0, in socket programming c?
struct sockaddr_in servaddr, cliaddr;
// Creating socket file descriptor
if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
memset(&servaddr, 0, sizeof(servaddr));
memset(&cliaddr, 0, sizeof(cliaddr));
In my previous work on structs i didn't fill the structures with value 0, but here in socket we always reset, fill 0, the struct before using it. Why is it important to fill 0 the structure?
c sockets struct memset
add a comment |
struct sockaddr_in servaddr, cliaddr;
// Creating socket file descriptor
if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
memset(&servaddr, 0, sizeof(servaddr));
memset(&cliaddr, 0, sizeof(cliaddr));
In my previous work on structs i didn't fill the structures with value 0, but here in socket we always reset, fill 0, the struct before using it. Why is it important to fill 0 the structure?
c sockets struct memset
add a comment |
struct sockaddr_in servaddr, cliaddr;
// Creating socket file descriptor
if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
memset(&servaddr, 0, sizeof(servaddr));
memset(&cliaddr, 0, sizeof(cliaddr));
In my previous work on structs i didn't fill the structures with value 0, but here in socket we always reset, fill 0, the struct before using it. Why is it important to fill 0 the structure?
c sockets struct memset
struct sockaddr_in servaddr, cliaddr;
// Creating socket file descriptor
if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
memset(&servaddr, 0, sizeof(servaddr));
memset(&cliaddr, 0, sizeof(cliaddr));
In my previous work on structs i didn't fill the structures with value 0, but here in socket we always reset, fill 0, the struct before using it. Why is it important to fill 0 the structure?
c sockets struct memset
c sockets struct memset
asked Dec 28 '18 at 5:49
Henok TesfayeHenok Tesfaye
457317
457317
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
Unless the variables are declared as static storage duration, they will have an arbitrary value upon creation. Hence, it's always a good idea to set them to a known value before using them.
For example, if your next step after socket()
is a connect()
or bind()
, they will very much want a specific structure value for client or server respectively.
It's no different really to the function:
void xyzzy(void) {
int plugh;
printf("%dn", plugh);
}
inasmuch as it may print any value.
add a comment |
In continuation of @paxdiablo explanation -
You may define a const
static
instance of the struct
with the initial values.
static const struct sockaddr_in EmptyStruct;
A struct initializer may be used to set desired initial values (could be all 0es as by memset)
Then every time you want to reset the struct you can by
servaddr = EmptyStruct;
cliaddr = EmptyStruct;
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53954188%2fwhy-we-use-memset-to-fill-the-structure-with-value-0-in-socket-programming-c%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Unless the variables are declared as static storage duration, they will have an arbitrary value upon creation. Hence, it's always a good idea to set them to a known value before using them.
For example, if your next step after socket()
is a connect()
or bind()
, they will very much want a specific structure value for client or server respectively.
It's no different really to the function:
void xyzzy(void) {
int plugh;
printf("%dn", plugh);
}
inasmuch as it may print any value.
add a comment |
Unless the variables are declared as static storage duration, they will have an arbitrary value upon creation. Hence, it's always a good idea to set them to a known value before using them.
For example, if your next step after socket()
is a connect()
or bind()
, they will very much want a specific structure value for client or server respectively.
It's no different really to the function:
void xyzzy(void) {
int plugh;
printf("%dn", plugh);
}
inasmuch as it may print any value.
add a comment |
Unless the variables are declared as static storage duration, they will have an arbitrary value upon creation. Hence, it's always a good idea to set them to a known value before using them.
For example, if your next step after socket()
is a connect()
or bind()
, they will very much want a specific structure value for client or server respectively.
It's no different really to the function:
void xyzzy(void) {
int plugh;
printf("%dn", plugh);
}
inasmuch as it may print any value.
Unless the variables are declared as static storage duration, they will have an arbitrary value upon creation. Hence, it's always a good idea to set them to a known value before using them.
For example, if your next step after socket()
is a connect()
or bind()
, they will very much want a specific structure value for client or server respectively.
It's no different really to the function:
void xyzzy(void) {
int plugh;
printf("%dn", plugh);
}
inasmuch as it may print any value.
answered Dec 28 '18 at 5:54
paxdiablopaxdiablo
629k16912431664
629k16912431664
add a comment |
add a comment |
In continuation of @paxdiablo explanation -
You may define a const
static
instance of the struct
with the initial values.
static const struct sockaddr_in EmptyStruct;
A struct initializer may be used to set desired initial values (could be all 0es as by memset)
Then every time you want to reset the struct you can by
servaddr = EmptyStruct;
cliaddr = EmptyStruct;
add a comment |
In continuation of @paxdiablo explanation -
You may define a const
static
instance of the struct
with the initial values.
static const struct sockaddr_in EmptyStruct;
A struct initializer may be used to set desired initial values (could be all 0es as by memset)
Then every time you want to reset the struct you can by
servaddr = EmptyStruct;
cliaddr = EmptyStruct;
add a comment |
In continuation of @paxdiablo explanation -
You may define a const
static
instance of the struct
with the initial values.
static const struct sockaddr_in EmptyStruct;
A struct initializer may be used to set desired initial values (could be all 0es as by memset)
Then every time you want to reset the struct you can by
servaddr = EmptyStruct;
cliaddr = EmptyStruct;
In continuation of @paxdiablo explanation -
You may define a const
static
instance of the struct
with the initial values.
static const struct sockaddr_in EmptyStruct;
A struct initializer may be used to set desired initial values (could be all 0es as by memset)
Then every time you want to reset the struct you can by
servaddr = EmptyStruct;
cliaddr = EmptyStruct;
answered Dec 28 '18 at 6:02
RizwanRizwan
1,592419
1,592419
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53954188%2fwhy-we-use-memset-to-fill-the-structure-with-value-0-in-socket-programming-c%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown