What does TCPSocket#each iterate over in ruby? -
i'm not familiar ruby, wasn't able find documentation method.
when calling each on tcpsocket object, this
require "socket" srv = tcpserver.new("localhost", 7887) skt = srv.accept skt.each {|arg| p arg} does block called once per tcp packet, once per line (after each '\n' char), once per string (after after each nul/eof), or different entirely?
tl;dr tcpsocket.each iterate each newline delimited \n string receives.
more details:
a tcpsocket basicsocket powder sugar on top. , basicsocket child of io class. io class stream of data; thus, iterable. , that where can find how each defined tcpsocket.
fire irb console , enter line of code $stdin socket see how each behaves. both inherit io. here example of happens:
irb(main):011:0> $stdin.each {|arg| p arg + "."} hello "hello\n." but directly answer question, block called once per \n character. if client sending data 1 character @ time block not going executed until sees \n.
here quick sample client show this:
irb(main):001:0> require 'socket' => true irb(main):002:0> s = tcpsocket.open("localhost", 7887) => #<tcpsocket:fd 9> irb(main):003:0> s.puts "hello" => nil irb(main):007:0> s.write "hi" => 2 irb(main):008:0> s.write ", nice meet you" => 18 irb(main):009:0> s.write "\n" => 1 and here server printed out:
"hello\n" "hi, nice meet you\n" # note: did not print until sent "\n"
Comments
Post a Comment