旧・無印吉澤

昔はてなダイアリーに書いていた記事のアーカイブです

最近の進捗状況

今後の作業のためにとりあえずRubyで(UDP or TCP)/(IPv4 or IPv6)ソケットを作って送受信機能をテストしたりしてるんですが、最近ネットワーク関係の機能を試していてRubyの強力さをホントに実感してきました。

Cみたいに「ここにはどの構造体を渡すんだっけな〜?」とか考えなくてもソケットなんて簡単に作れるし、スレッドもブロックを渡すだけで簡単に作れちゃうし……。とにかく短いプログラムでいろんなことが出来るなぁ、というのが素直な感想です。ただ、その分細かい制御が出来なくて不満な点も多少見つかりました。「Cなら出来るのに!」ってこととか。

例えば、今日気になったのは、RubyのUDPSocket#recvfromメソッドを呼び出したときの動作。Cのrecvfrom関数の場合は、パケット送信者の情報を格納するために渡す構造体の設定次第で、recvfromが送信者のIPアドレスからホスト名を解決するかどうかを指定出来るんです。が、Rubyの方だとrecvfromメソッドにそういう情報を渡すところが無いので毎回必ずホスト名を解決しようとしてしまう模様。特に、いま僕が使っている実験環境ってDNSが立っていないので、毎回毎回ホスト名探しに行ってはタイムアウトまで待つという動作をしてしまって……recvfromを使うだけでタイムラグが不必要に大きくなってしまうんですよね。なんか解決策とかあるんでしょうか。