Working with TCP Sockets 読書メモ 第3章 クライアントのライフサイクル

目次


クライアントのライフサイクル

  • クライアントの典型的なライフサイクルは以下
  1. create
  2. bind
  3. connect
  4. close
  • create(生成)の部分はクライアントもサーバも同じ

クライアントのbind

  • サーバは大抵の場合、bindを使ってアドレスとポートに紐付けを行う
  • クライアントでは、bindを使うことはまれである
    • bindを使わなかった場合、クライアントソケットはランダムなエフェメラルポートに紐付けられる
    • クライアントは外部からの接続を受け付ける必要が無いので、ポート番号を明示する必要もない

クライアントのconnect

  • connectを呼び出すと、リモートのソケットへの接続が始まる
require 'socket'

socket = Socket.new(:INET, :STREAM)

# 80番ポートでgoogle.comへの接続を開始する
remote_addr = Socket.pack_sockaddr_in(80, 'google.com')
socket.connect(remote_addr)

接続の消失

  • 存在しないサーバや、接続を受け付ける準備ができていないサーバにアクセスすると、クライアントはレスポンス待ちで固まってしまう
  • 最終的にErrno::ETIMEDOUTが発生する

Rubyによるラッパー

  • 生成とbindを1行で
socket = TCPSocket.new('google.com', 80)
  • ブロック構文を使った記述方法
Socket.tcp('google.com', 80) do |connection|
  connection.write "GET / HTTP/1.1\r\n"
  connection.close
end

本章で扱ったシステムコール

  • bind(2)
  • connect(2)

ディスカッションに参加

1件のコメント

コメントをどうぞ

コメントを残す