2

正確なエラーと同様に、該当するコードは以下のとおりです。

sd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
if ( setsockopt( sd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on) ) < 0 )
{
    printf("%s\n", strerror(errno));
}
if ( setsockopt( sd, IPPROTO_IP, IP_DF, &on, sizeof(on) ) < 0 )
{
    printf("%s\n", strerror(errno));
    printf("DF\n");
}

エラー:

root@PC:~# gcc main.c
main.c: In function ‘main’:
main.c:71: warning: format not a string literal and no format arguments
root@PC:~# ./a.out localhost
Protocol not available
DF

2 番目の setsockopt でエラーが発生し、最初の setsockopt ではエラーが発生しないのは奇妙です。

4

2 に答える 2

3

IP_DFソケットオプションではなく、パケットフラグです。有効なソケット オプションは、ip(7)man ページに記載されています。

于 2012-04-04T04:39:34.610 に答える
0

ip(7) man ページから。

   IP_NODEFRAG (since Linux 2.6.36)
          If enabled (argument is nonzero), the reassembly of outgoing packets is
          disabled in the netfilter layer.  This option is only valid for
          SOCK_RAW sockets.  The argument is an integer.
于 2012-04-04T08:30:58.730 に答える