6

ソケットプログラミングは初めてです

私はICMPリクエストプログラムを見ました。彼らsetsockoptはソケットに使用していました

int on = 1;

setsockopt(s, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on))

しかし、このステートメントを使用しなくても、プログラムは正しく実行されます。IP構造を含むこのソケットをカーネルに言及することがなぜそれほど重要なのですか?

4

1 に答える 1

10

このIP_HDRINCLオプションは次のことを行います (man ページから):

IP_HDRINCLIPv4 レイヤーは、ソケット オプションがソケットで有効になっていない限り、パケットの送信時に IP ヘッダーを生成します。有効にすると、パケットに IP ヘッダーが含まれている必要があります。受信用の IP ヘッダーは常にパケットに含まれています。

おそらく、あなたのプログラムは IP ヘッダを構築しています。このオプションを削除すると、カーネルの IP ヘッダーが使用されます。それが「機能する」かどうかは、プログラムが何をするかによって異なります。おそらく、状況によっては IP ヘッダーをカスタマイズしたいのですが、これを削除すると機能しません。

プログラムの残りの部分を投稿するか、それについて少し教えていただければ、お役に立てるかもしれません。

于 2014-03-01T16:29:26.577 に答える