【发布时间】:2021-04-28 15:34:48
【问题描述】:
在 ruby 2.7.0 中运行 TCPServer 时,我想查看我的客户端何时关闭连接(或无法继续阅读)。但是,当我检查服务器时,我从未看到连接已关闭。
我尝试过使用许多不同的 ruby 套接字原语,但这里似乎没有任何效果。我也尝试过写入套接字以希望强制出错,但这似乎没有帮助。
我在这里包括一个例子:
# main.rb
require_relative 'server'
PORT = 9000
server_thread = Server.thread
socket = TCPSocket.open("localhost", PORT)
socket.puts '5'
server_thread.join(1)
socket.close
puts socket.closed?
server_thread.join(2)
# server.rb
require 'socket'
class Server
def self.thread
Thread.new do
server = TCPServer.open(PORT)
while true
server.accept do |socket|
while true
socket.puts '1'
# why doesn't this ever happen?
puts 'closed' if socket.closed?
end
end
end
end
end
end
运行ruby main.rb时,此代码输出
true
而我希望它输出:
true
closed
【问题讨论】:
标签: ruby tcp network-programming