ソケットプログラミングは初めてです
私はICMPリクエストプログラムを見ました。彼らsetsockopt
はソケットに使用していました
int on = 1;
setsockopt(s, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on))
しかし、このステートメントを使用しなくても、プログラムは正しく実行されます。IP構造を含むこのソケットをカーネルに言及することがなぜそれほど重要なのですか?
ソケットプログラミングは初めてです
私はICMPリクエストプログラムを見ました。彼らsetsockopt
はソケットに使用していました
int on = 1;
setsockopt(s, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on))
しかし、このステートメントを使用しなくても、プログラムは正しく実行されます。IP構造を含むこのソケットをカーネルに言及することがなぜそれほど重要なのですか?
このIP_HDRINCL
オプションは次のことを行います (man ページから):
IP_HDRINCL
IPv4 レイヤーは、ソケット オプションがソケットで有効になっていない限り、パケットの送信時に IP ヘッダーを生成します。有効にすると、パケットに IP ヘッダーが含まれている必要があります。受信用の IP ヘッダーは常にパケットに含まれています。
おそらく、あなたのプログラムは IP ヘッダを構築しています。このオプションを削除すると、カーネルの IP ヘッダーが使用されます。それが「機能する」かどうかは、プログラムが何をするかによって異なります。おそらく、状況によっては IP ヘッダーをカスタマイズしたいのですが、これを削除すると機能しません。
プログラムの残りの部分を投稿するか、それについて少し教えていただければ、お役に立てるかもしれません。