通过一些关于套接字的例子,我遇到的就是这个,我正在努力解决语法问题。这是代码,它工作得很好;
require "socket"
server = TCPServer.new(1234)
loop do
Thread.start(server.accept) do
|connection|
puts "Connection started"
while line = connection.gets
break if line =~ /quit/
puts line
connection.puts "received"
end
conneciton.puts "closing the connection"
connection.close
end
end
稍微刮了一下后,我发现server.accept代码会等到检测到连接,然后才开始循环,直到调用quit,然后关闭它。
我想要一点点帮助是我应该如何从文档中推断出这一点而不用代码编写?我是在错误的地方寻找文件,还是在视线中,我只是没有正确阅读?这是我一直在使用的来源;
http://www.ruby-doc.org/stdlib-1.9.2/libdoc/socket/rdoc/TCPServer.html#method-i-accept
答案 0 :(得分:3)
事实是,文档可能更好。
该文档假设您已熟悉套接字 - 这与POSIX accept调用的行为非常相似(甚至可能相同),其文档说明如果它们不是挂起的连接而您没有显式请求非阻塞操作“accept()将阻塞,直到存在连接”。 (对于特定类型的等待,“Block”是UNIX说的。)
Ruby类中的非阻塞操作是accept_nonblock
(根据您链接的文档),因此您可以推断accept
正在阻止。
Ruby文档由志愿者维护,我相信他们很乐意接受补丁以使其更好。