ネットワーク

Rubyのaccept_nonblock(exception: false)

Rubyのサーバーソケットのaccept_nonblockは、IOのread_nonblockと同様にexception: falseでIO::WaitReadableを投げないようにできる。 例外を投げる場合と投げない場合で、どれくらい差があるものなのか実験してみた。 require 'benchmark' require 'socket…

rubyにおけるソケットのaccept_nonblockの競合

Rubyで1つのサーバーソケットを2つのプロセスから同時にaccept_nonblockするとどうなるか。サーバーのgraceful restartでよくありそうなシチュエーションを試してみる。 実験コード: require 'io/wait' require 'socket' s = TCPServer.new(0) p [ :listen, …

LinuxとWSLの差異: UNIX Domain Socket

LinuxはUNIX Domain Socketを何度もlisten(2)できるが、WSL (Windows Subsystem for Linux)は2回目のlisten(2)がエラーになる。backlogを変更しようとしてはまった。Rubyで検証した結果は次のとおり。 Linux: $ uname -a Linux gut 4.14.74-v7+ #1149 SMP Mo…

GNU screenからssh-agentを使う

GNU screenからssh-agentを使う場合、エージェントソケットのシンボリックリンクを張るのが常道のようなのだが、WSL環境でホームディレクトリをdrvfsにしているとunix domain socketとシンボリックリンクの相性が悪いようでどうにもうまく動かなかった。 そ…

dRubyのパフォーマンス測定

経緯 プロセス間通信でdRubyを使おうと思ったが、パフォーマンスが気になったので測定してみた。 コード ベンチマークは自作の次のスクリプトを使う。 github.com のbenchmark_basic.rbを使用。 ベンチマークコードの抜粋: n = ARGV.shift || '1_000_000' n …