2021-01-01から1年間の記事一覧
前回までは、 setsocopt 関数はOSのシステムコールを呼んでいるらしいというところまで確認した。 今回は、カーネルのシステムコールの実装を覗いてみたいと思います。(確認した時のカーネルのバージョンは linux-4.19.172 kernel/git/stable/linux.git - L…
さて、前回までで、文字列データでオプションを指定しても、mreq 構造体で指定してもシステムコールとしては同じものが実行されるところまでを確認した。 今回は、Cのコードからシステムコールが実行されるまでの流れを追ってみようと思う。 setsockopt は定…
前提 Amazon Linux2 ( amzn2-ami-hvm-2.0.20210126.0-x86_64-gp2 ) アップデート前のカーネルバージョン 4.14.214 アップデート後のカーネルバージョン 4.19.172 手順 必要なパッケージのインストール # yum groupinstall "Development Tools" # yum install…
さて、前回記事では、Cでの setsocopt 関数の optval にはRubyの同メソッドからオプションのデータを渡した際には文字列データを渡していることまでを確認した。では、Cの仕様としては指定の構造体を渡すところで、なぜ文字列でも問題ないのか、本当に問題な…
さて、前回ではRubyの BasicSocket#setsocopt メソッドの optval になぜ文字列を渡せばいいのか、という疑問が生じるまでの背景を記した。今回は、その疑問の深堀りをさらに進めていく。 Rubyは実装はCで書かれているため、 BasicSocket#setsocopt メソッド…
ソケットをプロミスキャスモードにするためにはPACKET_ADD_MEMBERSHIPオプションをsetsockoptで設定する必要がある。 よくあるサンプルコードだが、Cなら以下のような感じだ。 sock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); struct packet_mreq mr…
.circleci/config.yml を編集しながら試していく。 これじゃ駄目 さすがにversionだけだと駄目。 これだとジョブかワークフローを作れということでエラー。 version: 2.1 以下のエラー # Error calling workflow: 'workflow' # Cannot find a definition for…
ハマったところメモ 最新のglibc でコンパイルしようとすると、以下のようなエラーが各種ライブラリについて出てきた。1つ1つ潰していくのは大変すぎるのと、標準リポジトリでは公開されていないバージョンのライブラリも必要になってくるようだったのでイン…
require "socket" # EtherIPヘッダも含んでそれらも含めた上側のデータ def trans_data # IP Header: 20Byte # MAC Header: 14Byte # EtherIP Header: 2Byte # とりあえず、EtherIPヘッダ+自然に生成されたEtherヘッダ+IPヘッダをベタで。 bynary_data = 0…
以下の許可が必要だった。「設定」から探すと出てくる。
Gemをリリース(アップデート)して、アップデートしたVersionを実際にインストールしてみようとVersion指定して bundle install しようとしたら以下のエラーが。 Could not find gem xxxx in any of the gem sources listed in your Gemfile. ところが、5分…
以下の3つの方法を順番に試してみる。 引数/戻り値の型は記載されていてほしいのでtypeprof が動くのならそれを利用するのがベターそう。 各方法の解説は参考リンクのページが詳しい。 rbs prototype rb Rubyファイルを指定して静的に解析 引数/戻り値の型は…