memo.log

技術情報の雑なメモ

setsocopt

setsocopt探訪のメモ(5)

前回までは、 setsocopt 関数はOSのシステムコールを呼んでいるらしいというところまで確認した。 今回は、カーネルのシステムコールの実装を覗いてみたいと思います。(確認した時のカーネルのバージョンは linux-4.19.172 kernel/git/stable/linux.git - L…

setsocopt探訪のメモ(4)

さて、前回までで、文字列データでオプションを指定しても、mreq 構造体で指定してもシステムコールとしては同じものが実行されるところまでを確認した。 今回は、Cのコードからシステムコールが実行されるまでの流れを追ってみようと思う。 setsockopt は定…

setsocopt探訪のメモ(3)

さて、前回記事では、Cでの setsocopt 関数の optval にはRubyの同メソッドからオプションのデータを渡した際には文字列データを渡していることまでを確認した。では、Cの仕様としては指定の構造体を渡すところで、なぜ文字列でも問題ないのか、本当に問題な…

setsocopt探訪のメモ(2)

さて、前回ではRubyの BasicSocket#setsocopt メソッドの optval になぜ文字列を渡せばいいのか、という疑問が生じるまでの背景を記した。今回は、その疑問の深堀りをさらに進めていく。 Rubyは実装はCで書かれているため、 BasicSocket#setsocopt メソッド…

setsocopt探訪のメモ(1)

ソケットをプロミスキャスモードにするためにはPACKET_ADD_MEMBERSHIPオプションをsetsockoptで設定する必要がある。 よくあるサンプルコードだが、Cなら以下のような感じだ。 sock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); struct packet_mreq mr…