Ruby 2.6.0 リファレンスマニュアル > ライブラリ一覧 > socketライブラリ > TCPServerクラス

class TCPServer

クラスの継承リスト: TCPServer < TCPSocket < IPSocket < BasicSocket < IO < Enumerable < File::Constants < Object < Kernel < BasicObject

要約

TCP/IP ストリーム型接続のサーバ側のソケットのクラスです。

このクラスによって簡単にソケットを利用したサーバのプログラミングができます。

例えば echo サーバは以下のようになります。

require "socket"

gs = TCPServer.open(0)
socks = [gs]
addr = gs.addr
addr.shift
printf("server is on %s\n", addr.join(":"))

while true
  nsock = select(socks)
  next if nsock == nil
  for s in nsock[0]
    if s == gs
      socks.push(s.accept)
      print(s, " is accepted\n")
    else
      if s.eof?
        print(s, " is gone\n")
        s.close
        socks.delete(s)
      else
        str = s.gets
        s.write(str)
      end
    end
  end
end

Thread を使えばもっと短くなります。

require "socket"

gs = TCPServer.open(0)
addr = gs.addr
addr.shift
printf("server is on %s\n", addr.join(":"))

while true
  Thread.start(gs.accept) do |s|       # save to dynamic variable
    print(s, " is accepted\n")
    while s.gets
      s.write($_)
    end
    print(s, " is gone\n")
    s.close
  end
end

特異メソッド

定義 説明
new(host=nil, service) -> TCPServer
open(host=nil, service) -> TCPServer

新しいサーバー接続をオープンします。service は /etc/services (または NIS) に登録されているサービス名かポート番号で指定します。host を指定した時は指定したホストに対しての接続だけを受け付けます。

インスタンスメソッド

定義 説明
accept -> TCPSocket

クライアントからの接続要求を受け付け、接続した TCPSocket のインスタンスを返します。

accept_nonblock -> TCPSocket

ソケットをノンブロッキングモードに設定した後、 accept(2) を呼び出します。

listen(backlog) -> 0

listen(2) を実行します。 (Socket#listenと同じ)

sysaccept -> Integer

接続したクライアントのソケットをファイル記述子で返すことを除けば TCPServer#accept と同じです。

継承したメソッド

! != __id__ instance_eval instance_exec method_missing singleton_method_added singleton_method_removed singleton_method_undefined connect_address do_not_reverse_lookup do_not_reverse_lookup= getpeereid getpeername getsockname getsockopt local_address recv recv_nonblock recvmsg recvmsg_nonblock remote_address send sendmsg sendmsg_nonblock setsockopt shutdown .do_not_reverse_lookup .do_not_reverse_lookup= .for_fd << advise autoclose= autoclose? binmode binmode? bytes chars clone close close_on_exec= close_on_exec? close_read close_write closed? codepoints cooked cooked! each each_byte each_char each_codepoint echo= echo? eof expect external_encoding fcntl fdatasync fileno flush fsync getbyte getc getch gets iflush internal_encoding ioctl ioflush isatty lineno lineno= lines noecho nonblock nonblock= nonblock? nread oflush pathconf pid pos pos= pread print printf putc puts pwrite raw raw! read read_nonblock readbyte readchar readline readlines readpartial ready? reopen rewind scanf seek set_encoding stat sync sync= sysread sysseek syswrite to_io ungetbyte ungetc wait wait_writable winsize winsize= write write_nonblock .binread .binwrite .console .console_size .copy_stream .default_console_size .foreach .pipe .popen .read .readlines .select .sysopen .try_convert .write ::SEEK_CUR ::SEEK_DATA ::SEEK_END ::SEEK_HOLE ::SEEK_SET addr peeraddr recvfrom .getaddress !~ <=> == === =~ __send__ _dump class define_singleton_method display enum_for eql? equal? extend freeze frozen? hash initialize initialize_copy inspect instance_of? instance_variable_defined? instance_variable_get instance_variable_set instance_variables is_a? itself marshal_dump marshal_load method methods nil? object_id pretty_inspect pretty_print pretty_print_cycle pretty_print_inspect pretty_print_instance_variables private_methods protected_methods psych_to_yaml public_method public_methods public_send remove_instance_variable respond_to? respond_to_missing? singleton_class singleton_method singleton_methods taint tainted? tap then to_a to_ary to_hash to_int to_proc to_regexp to_s to_str trust untaint untrust untrusted? .yaml_tag ::ARGF ::ARGV ::DATA ::ENV ::FALSE ::NIL ::RUBY_COPYRIGHT ::RUBY_DESCRIPTION ::RUBY_ENGINE ::RUBY_ENGINE_VERSION ::RUBY_PATCHLEVEL ::RUBY_PLATFORM ::RUBY_RELEASE_DATE ::RUBY_REVISION ::RUBY_VERSION ::SCRIPT_LINES__ ::STDERR ::STDIN ::STDOUT ::TOPLEVEL_BINDING ::TRUE .gethostbyname