我無法理解有關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有多大。 –