LoginSignup
17
15

More than 5 years have passed since last update.

接続してきた相手のIPアドレスを返すだけのサーバ

Posted at

分散システム組んでるとこういう簡単なのが便利だったりする。
RubyのSocketでacceptしてSocketの情報読んで送り返してcloseするだけの簡単な物。
setsockoptで再利用できるよう指定することで、二度目以降もこのプロセスが立ち上がりやすいようにしている。

require 'socket'

# ソケット作成
serv = Socket.new Socket::AF_INET, Socket::SOCK_STREAM, 0

# 関連付けたい自分のアドレスを作成
sockaddr = Socket.sockaddr_in 9191, "0.0.0.0"

# 再利用可能なように設定
serv.setsockopt Socket::SOL_SOCKET, Socket::SO_REUSEADDR, true

# アドレスとソケットを関連付け
serv.bind sockaddr

# listen開始。外部の接続を受け付ける
serv.listen 5

puts 'IP notifier start'

# 無限ループ
loop do

  # 接続を待機。sockは[socket, address]の配列で帰って来る
  sock, addr = serv.accept

  # IPアドレスとポートの組を獲得。 _ で受け取ってるのは使わないから
  host, _ = addr.ip_unpack

  # 接続してきたクライアントにそのIPを通知
  sock.write host

  # ソケット切断
  sock.close

end

簡単ですね。

17
15
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
15