由getpeername引发的一个字节对齐问题

    技术2026-01-13  0

    struct sockaddr *sa; sa = Malloc(MAXSOCKADDR); len = MAXSOCKADDR; Getpeername(sockfd, sa, &len);//sockfd是一个已连接套接字(tcp) 此函数用来获取连接另一端的协议地址

    注意:这里我们用malloc ,而不是一开始就定义 char sockaddr[MAXSOCKADDR]然后按照协议作类型强转

    。是因为malloc 总是返回一个系统所要求的严格对齐的指针, 而char数组可能被分配在一个奇数字节的边界上

    一旦是这种情况发生,我们在类型强转后使用协议地址时就会有问题。

     

    除char 外的其他大多数多字节类型,系统在分配时应当还是严格按照偶数字节边界对齐的。

    最新回复(0)