[英]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
//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)
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.