UDP limited broadcast が送出できない問題ですが、OS を 6.1-RELEASE から 7.2- RELEASE に切替えてみたところ、
1) fd = socket(PF_INET, SOCK_RAW, IPPROTO_RAW) 2) setsockopt(fd , IPPROTO_IP, IP_ONESBCAST, ..) の組合せでうまく動作することがわかりました。注意点は 1) sin.sin_addr.s_addr は 255.255.255.255 でなく、自分の ネットワークの broadcast address にする (これで、送信 時に 255.255.255.255 に変更される。255.255.255.255 を 指定すると、うまくゆかない) 2) SOCK_UDP で soket() を作ると、うまくゆかない。 3) SO_BROADCAST の socket option は要らない。 で、ip(4) の SOCK_UDP でも使えるという記述とは矛盾するよ うです。 多分、 http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/99558 このあたりから修正されたのではないかと思います。SOCK_RAW だと IP packet を組み立てる手間は増えますが、とりあえず 解決。 平林 浩一