MasaのITC Life

夢は起業家!全てにおいて凡人だけど頑張ることだけはいっちょ前!

プログラミング

UDPをBroadcastしようとしたら、permission deniedになった件

投稿日:

DHCPパケットを送信するコードを書いていたら、どうも送信の部分が上手くいきませんでした。

通常通りUDPソケットを作って、作成したソケット、データ、sockaddr_inなどをsendtoで指定しました。ところが、実際に実行してみると、"permission denied"になって、思う通りにいきませんでした。最初がsendtoに指定する引数に問題があるのかなと思っていたのですが、DHCPサーバのIPアドレスを直接指定すると上手くいきました。



もう少し調べてみると、どうやらpermission deniedはsendtoのエラーではないみたいです。なのでそれ以外の箇所として思い当たったのが、 sockaddr_in.sin_addr.s_addr = INADDR_BROADCASTが怪しいと思いました。結果、その箇所に関連するコードが欠けていたため、上手く送信できませんでした。


気づくと「なんだそこか!」となるのですが、当方なかなか気づくのに時間がかかり、やられました。なので、シャアしたいと思います。

setsockopt (SO_BROADCAST)

setsockoptは、ソケットのオプションをいじる関数です。setsockoptで設定するフラグはいくつかあるのですが、その中にUDPでブロードキャストパケットを送信するためのフラグ( SO_BROADCAST )があります。


こんな感じです。

このコードを書き忘れてたために、permission deniedになってしまいました。


※実際にコードに書くときは、setsockopt関数の戻り値によるエラー処理も併せて書きます。



もしUDPでブロードキャストをするコードを書いていて、permittion deniedのエラーで躓いている場合は、上記の箇所を確認してみてください。




最後まで読んでいただきありがとうございました。

-プログラミング

Copyright© MasaのITC Life , 2023 All Rights Reserved Powered by STINGER.