특별한 이유 때문에 sockaddr_in 구조체를 0으로 초기화해야한다는 확실한 가이드가 있습니까?memset sockaddr_in이 0으로 설정되는 이유
struct sockaddr_in foo;
memset(&foo, 0, sizeof(foo));
foo.sin_port = htons(1025);
foo.sin_family = AF_INET;
inet_pton(AF_INET, "10.0.0.1", &foo.sin_addr);
내가 어떤 소스가 char sin_zero[8]
회원이 패딩이 있음을 말한다 이해 : 나는 실제 코드 또는 예를하거나 책을보고 할 때마다
// IPv4 AF_INET sockets:
struct sockaddr_in {
short sin_family; // e.g. AF_INET, AF_INET6
unsigned short sin_port; // e.g. htons(3490)
struct in_addr sin_addr; // see struct in_addr, below
char sin_zero[8]; // zero this if you want to
};
항상 다음과 유사한 코드 구조를 가지고 0으로 설정해야하지만 나머지는 0으로 설정해야합니다. 특히 선언의 다음 몇 라인에서 대부분 초기화됩니다. 심지어 sin_zero 회원에 관한 beej 프로그래밍 가이드 said it is not mandatory to zero them out anymore. 나는 설명을 찾았지만 요점은 밝혀지지 않았다. 이 stack overflow question에는 초기화 자체에 대한 몇 가지 제안 사항이 있지만 제로가 필요한 이유는 설명하지 않습니다.
레거시 사례입니까, 아니면 실종 되었습니까? 모든 참조를 주셔서 감사합니다.
가비지 값에 의존하는 코드로 끝나지 않도록합니다. 이러한 코드는 Heisenbugs 및 디버그하기 어려운 다른 버그를 생성 할 수 있습니다. –
또는'struct sockaddr_in foo = {AF_INET, htons (1025)};'는 더 짧고 나머지 멤버 만 0으로 만듭니다. – MSalters