2012-03-13 9 views
1

bind()とaccept()を使用すると、2番目のパラメータで構造体のサイズを指定できます。しかし、私は構造体全体のサイズが渡されているのを見ただけです。なぜあなたはサイズを指定するのですか?別の番号を使用する場合はありますか?なぜstructのサイズを指定できるのですか?

+0

UNIXドメインソケット対tcpソケット対... – bmargulies

答えて

0

サイズは、実装、ソケットおよび/またはプラットフォームのタイプに依存する可能性があります。だから、コールでこのサイズを渡すと、余分なフィールドやパディングが使用されていても、同じコードが異なるプラットフォームで動作します。 sockaddr構造体の

1

サイズは、IPv4またはIPv6を使用する場合に応じて、例えば、異なる場合があります。

3

異なるソケットプロトコルファミリは、構造の異なる種類を使用しています。 IPv6アドレスではなく構造を利用するのに対し、例えば、IPv4アドレスを使用して、TCPとUDPソケットが28バイトであり、サイズは16バイトであるsockaddr_in構造を利用します。 IPv4の、UNIX、IPv6のようなソケットアドレスの種類を、受け入れるようにオーバーロードを貧乏人の機能:

0

これは歴史的な理由によるものです。詳細は、page 68 of UNIX Network Programming: The sockets networking APIを参照してください。これらは、カーネル・モードとカーネルのアドレス空間で実行するシステムコール、であり、カーネルはそれ以外の場合はカーネルアドレス空間とユーザアドレス空間の間でコピーするデータの量を把握していないので、

1

サイズが指定されています。たとえば、IPv4またはIPv6のアドレス構造を使用しているかどうかはわかりません。

関連する問題