我无法理解有关Unix域套接字的bind()函数。C编程 - 了解绑定()
address.sun_family = AF_UNIX;
addrlen = sizeof(address.sun_family) + strlen(SOCK_PATH);
.
.
.
bind(socket_fd, (struct sockaddr *) &address, addrlen) != 0)
正如我现在明白了,这需要的是与插座()创建的socket_fd(位于进程命名空间),和“适用”,载于地址插座上的地址信息。基本上创建它,以便其他进程可以使用它....我认为这是正确的。
我不明白的是需要addrlen参数。这是没有前导/尾随空字节的地址结构的长度。正确?这个参数是否需要告诉bind()要读出多少字节的地址?
感谢您的洞察!
好的..但我需要&addrlen作为不可避免的accept()函数的第三个参数。那么为什么我不能在bind()和accept()中使用它? –
值是相同的(所以可以设置它),但是无论如何设置它都是无效的(正确地完成,它是'addrlen = sizeof(struct sockaddr_un);'只要你使用相同的套接字结构) – KevinDTimm
在'accept'的情况下,addrlen既是输入也是输出 - 你指定你传入的缓冲区的大小,内核告诉你连接到你的sockaddr有多大。 –