简体   繁体   English

哪种方法计算 sockaddr_un 结构的大小是正确的?

[英]Which way of calculating the size of a sockaddr_un structure is correct?

The unix domain sockets address structure is defined as: unix 域套接字地址结构定义为:

struct sockaddr_un {
    sa_family_t sun_family; /* AF_UNIX */
    char sun_path[108]; /* pathname */
};

And I see 2 ways of calculating the size, which later on is passed to bind我看到了 2 种计算大小的方法,稍后将其传递给bind

  1. From APUE and http://beej.us/guide/bgipc/html/multi/unixsock.html来自APUEhttp://beej.us/guide/bgipc/html/multi/unixsock.html
//beej's guide
struct sockaddr_un local;
int len;

len = strlen(local.sun_path) + sizeof(local.sun_family);
bind(s, (struct sockaddr *)&local, len);

//APUE
struct sockaddr_un un;
size = offsetof(struct sockaddr_un, sun_path) + strlen(un.sun_path);
bind(fd, (struct sockaddr *)&un, size)
  1. The Linux Progamming Interface Linux 编程接口
const char *SOCKNAME = "/tmp/mysock";
struct sockaddr_un addr;
addr.sun_family = AF_UNIX; /* UNIX domain address */
strncpy(addr.sun_path, SOCKNAME, sizeof(addr.sun_path) - 1);
bind(sfd, (struct sockaddr *) &addr, sizeof(struct sockaddr_un))

Which way is correct?哪种方式是正确的? (Maybe both are correct?) (也许两者都是正确的?)

正确的方法是实际使用sizeof (struct sockaddr_un)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM