Unix Domain Socketsに関するbind()関数の理解に問題があります。Cプログラミング - 理解するbind()
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()関数の第3引数としてaddrlenが必要です。だから私はbind()とaccept()の両方でそれを使わないのですか? –
値は同じです(設定しても問題ありませんが、同じソケット構造を使用している限り、正しく実行されます(正しく行われていると 'addrlen = sizeof(struct sockaddr_un);') – KevinDTimm
'accept'の場合、addrlenは入力と出力の両方です。あなたが渡しているバッファのサイズを指定します。カーネルはあなたに接続しているsockaddrの大きさを返します。 –