こんばんは。 In message <20091002161233.77c55364...@mogami.com> on Fri, 2 Oct 2009 16:12:33 +0900, Kouichi Hirabayashi <k...@mogami.com> wrote: > ip(4) を見ると、SOCK_RAW で IP_ONESBCAST を設定すれば > 良さそうですが、sin.sin_addr.s_addr が 202.23.252.255 > などであれば、イサネットフレームの宛先が IFF_BROADCAST > (ff:ff:ff:ff:ff:ff) になります。ところが IP_ONESBCASTはBSD系でもFreeBSD独自(DragonFly BSDもギリギリ入らず)なの で、素直に取れば、
> sin.sin_addr.s_addr が 255.255.255.255 だと、default > route に配送され、IP_ONESBCAST は無視されます。それで > はと、SO_DONTROUTE オプションを追加すると、sendto() > で Network is unreachable のエラー ! と、いうのはバグではないでしょうか。追加された経緯も、 Revision 119178 - (view) (annotate) - [select for diffs] Modified Wed Aug 20 14:46:40 2003 UTC (6 years, 1 month ago) by bms File length: 20849 byte(s) Diff to previous 118622 Add the IP_ONESBCAST option, to enable undirected IP broadcasts to be sent on specific interfaces. This is required by aodvd, and may in future help us in getting rid of the requirement for BPF from our import of isc-dhcp. と、いうことですから。send-prしても良さそうに思えます、最後に、BPFに 代えて使えたらいいな、的な記述もありますから。 In message <20091003154134.7abb6193...@mogami.com> on Sat, 3 Oct 2009 15:41:34 +0900, Kouichi Hirabayashi <k...@mogami.com> wrote: > 2) SOCK_UDP で soket() を作ると、うまくゆかない。 > 3) SO_BROADCAST の socket option は要らない。 > > で、ip(4) の SOCK_UDP でも使えるという記述とは矛盾するよ SOCK_UDP は SOCK_DGRAM ですな。 他のBSDも含めると、このような宛先にパケットを送る典型的なプログラムは DHCPのクライアントです。OpenBSDのOpenDHCPの実装は見てませんが、BSD系の OSでは通常はbpf(4)を使用して行うことになっているようです。 -- 神戸 隆博(かんべ たかひろ) at 仕事場