programing

struct addrinfo와 struct sockaddr의 차이점은 무엇입니까?

cafebook 2023. 9. 15. 21:20
반응형

struct addrinfo와 struct sockaddr의 차이점은 무엇입니까?

struct addrinfo는 socket addr 구조를 준비하는데 사용되고 struct sockaddr에는 socket addr 정보가 포함되어 있는 것으로 알고 있습니다.그런데 그게 실제로 무슨 뜻일까요? struct addrinfo에는 struct sockaddr에 대한 포인터가 포함되어 있습니다.왜 그들을 따로 떼어 놓죠?sockaddr 내의 모든 것을 addr_info로 결합할 수 없는 이유는 무엇입니까?

저는 그냥 여기서 추측하고 있는데 두 사람이 분리된 이유가 건물을 지날 때 공간을 절약하기 위해서인가요?예를 들어 bind() 호출에서는 포트 번호와 인터넷 주소만 있으면 됩니다.그래서 이 둘은 모두 구조적인 sockaddr로 그룹화되어 있습니다.그럼 더 큰 구조의 addrinfo 대신에 이 작은 구조를 그냥 넘겨주면 되는 겁니까?

struct addrinfo {
    int              ai_flags;     // AI_PASSIVE, AI_CANONNAME, etc.
    int              ai_family;    // AF_INET, AF_INET6, AF_UNSPEC
    int              ai_socktype;  // SOCK_STREAM, SOCK_DGRAM
    int              ai_protocol;  // use 0 for "any"
    size_t           ai_addrlen;   // size of ai_addr in bytes
    struct sockaddr *ai_addr;      // struct sockaddr_in or _in6
    char            *ai_canonname; // full canonical hostname

    struct addrinfo *ai_next;      // linked list, next node
};

struct sockaddr {
    unsigned short    sa_family;    // address family, AF_xxx
    char              sa_data[14];  // 14 bytes of protocol address
}; 

struct addrinfo에 의해 반환됩니다.getaddrinfo(), 그리고 성공적인 경우에는 그러한 것들의 링크된 목록을 포함합니다.struct지정된 호스트 이름 및/또는 서비스에 대해 s.

ai_addr사실 멤버가.struct sockaddr, 그 이유는struct는 다른 모든 구성원에 대해 공통 구성원을 포함하는 일반 구성원일 뿐이며 실제로 어떤 구조 유형을 가지고 있는지 확인하는 데 사용됩니다.전달하는 내용에 따라getaddrinfo(), 그리고 그 기능이 알아낸 것은ai_addr실제로는 에 대한 지시자일 수도 있습니다.struct sockaddr_in, 아니면struct sockaddr_in6, 또는 그 밖의 어떤 것이든, 그 특정 주소 입력에 적절한 것에 따라.이것은 그들이 "별도"로 유지되는 하나의 좋은 이유입니다. 왜냐하면 그 멤버는 여러 가지 다른 유형 중 하나를 가리킬 수 있기 때문입니다.structs, 만약 네가 모든 멤버들을 하드코드화해서struct addrinfo, 그것들이 다르기 때문에struct멤버가 다릅니다.

호스트 이름이 있는 경우 이 정보를 얻는 가장 쉬운 방법일 수 있지만 유일한 방법은 아닙니다.IPv4 연결의 경우, 그냥 다음을 채울 수 있습니다.struct sockaddr_in원하는 경우 자신을 구조화하고 데이터를 확보할 수 있으며, 호출 과정을 거치는 것을 피할 수 있습니다.getaddrinfo(), 정보를 수집하기 위해 인터넷으로 나갈 필요가 있다면 기다려야 할 수도 있습니다.사용하지 않으셔도 됩니다.struct addrinfo조금도.

언급URL : https://stackoverflow.com/questions/23401147/what-is-the-difference-between-struct-addrinfo-and-struct-sockaddr

반응형