ネットワークこわい

とちぎRuby会議07

2017-08-26

とみたまさひろ

  • Ruby歴 約20年
    (本日の老害枠の一人)

  • 得意分野: 文字化け

  • Software Design 2016年12月号
    • 「Rubyと文字コード」/「MySQLと文字コード」
  • Software Design 2017年7月号
    • 「MySQL[SELECT文]集中講座」
  • 今日は長野から5時間かけてきました
    (普通に新幹線使えば3時間)

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サーバーは、

  • socket()
  • bind()
  • listen()
  • accept()

するんだけど

bind()で止まってるやつがいた

Rubyで書くとこんな感じ

Socket.new(:INET, :STREAM).
  bind(Addrinfo.tcp("0.0.0.0", 12345))
sleep

このようなプロセスはどうやったら調べられるか

わかりません!😇

こわい 😱