gpt4 book ai didi

ruby - 在 gets() 中从 Ruby 中损坏的 TCP 套接字中恢复

转载 作者:可可西里 更新时间:2023-11-01 02:31:21 25 4
gpt4 key购买 nike

我正在读取 TCP 套接字上的输入行,类似于:

class Bla  
def getcmd
@sock.gets unless @sock.closed?
end

def start
srv = TCPServer.new(5000)
@sock = srv.accept
while ! @sock.closed?
ans = getcmd
end
end
end

如果端点在 getline() 运行时终止连接,则 gets() 挂起。

我该如何解决这个问题?有必要做非阻塞或定时 I/O 吗?

最佳答案

您可以使用 select 来查看是否可以安全地从套接字中获取,请参阅以下使用此技术的 TCPServer 实现。

require 'socket'

host, port = 'localhost', 7000

TCPServer.open(host, port) do |server|
while client = server.accept
readfds = true
got = nil
begin
readfds, writefds, exceptfds = select([client], nil, nil, 0.1)
p :r => readfds, :w => writefds, :e => exceptfds

if readfds
got = client.gets
p got
end
end while got
end
end

这里是一个试图破坏服务器的客户端:

require 'socket'

host, port = 'localhost', 7000

TCPSocket.open(host, port) do |socket|
socket.puts "Hey there"
socket.write 'he'
socket.flush
socket.close
end

关于ruby - 在 gets() 中从 Ruby 中损坏的 TCP 套接字中恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com