C++ 套接字 : size of the structure addrinfo

标签 c++ sockets

我正在将 eclipse 与 cygwin 结合使用。该应用程序是 64 位的。在 cygwin 中,结构定义为:

struct addrinfo {
  int             ai_flags;         /* input flags */
  int             ai_family;        /* address family of socket */
  int             ai_socktype;      /* socket type */
  int             ai_protocol;      /* ai_protocol */
  socklen_t       ai_addrlen;       /* length of socket address */
  char            *ai_canonname;    /* canonical name of service location */
  struct sockaddr *ai_addr;         /* socket address of socket */
  struct addrinfo *ai_next;         /* pointer to next in list */
};

sizeof(addrinfo)结果为48。socketlen_t的大小为4字节。 int 类型大小为 4 个字节。指针在 64 位应用程序中为 8 个字节。总字节数为 44(4 个整数 = 16 个字节,socket_len = 4 个字节,3 个指针 = 24;20+4+24 = 44)。我想知道缺少的 4 个字节是做什么用的?它们是用来填充的吗?我认为 44 个字节不需要对齐。有什么想法吗?

提前感谢您的回答。

最佳答案

它是填充,在 socklen_t 之后。结构中的下一个变量是一个指针,长度为 64 位,并且(在本例中)也将对齐到 64 位。但是请注意,填充取决于体系结构和编译器设置;它发生在这里,但不能保证总是发生。

请注意,由于您正在与操作系统共享此结构,因此您不应尝试自己更改填充(大多数编译器允许使用编译器开关和/或编译指示)。操作系统期望这个结构包含一定数量的填充。如果您未能提供它,则结构末尾的所有指针的值都会被误解。

关于C++ 套接字 : size of the structure addrinfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35386208/

相关文章:

c++ - 有效的 C++03 模板代码无法在 C++11 中编译

java - 停止长时间等待的线程

c - 需要声明不相关的字符数组以避免程序卡住

java - 从 C++ 套接字读取 Java 中的数据

c++ - 管道 boost::iostreams 没有任何输出

c++ - 从“const char [2]”到非标量类型“Persona”的转换请求

delphi - 如何混合套接字,消息和事件

linux - 从 shell 与正在运行的进程通信

c++ - Qt: QSqlDatabase: QMYSQL 驱动程序未加载

c++ - Unix IPC 套接字发送/接收同步