とちぎRuby会議07
2017-08-26
とみたまさひろ
Ruby歴 約20年
(本日の老害枠の一人)
得意分野: 文字化け
Ruby成分なし
ネットワークサーバープロセスを起動しようとしたら
エラー
% ruby -rsocket -e 'TCPServer.new(12345).accept'
-e:1:in `initialize': Address already in use -
bind(2) for nil port 12345 (Errno::EADDRINUSE)
from -e:1:in `new'
from -e:1:in `<main>'
「ははーん、さては誰かが12345ポートを掴んでるな」
% sudo netstat -an | grep 12345
%
あれ?
% sudo lsof -i -P | grep 12345
%
あれ?
なんだかわからない!
原因は…
ふつうはTCPサーバーは、
するんだけど
bind()で止まってるやつがいた
Rubyで書くとこんな感じ
Socket.new(:INET, :STREAM).
bind(Addrinfo.tcp("0.0.0.0", 12345))
sleep
このようなプロセスはどうやったら調べられるか