Ruby在recv时检测套接字关闭

Posted

技术标签:

【中文标题】Ruby在recv时检测套接字关闭【英文标题】:Ruby detect socket close while recv 【发布时间】:2012-09-01 16:30:07 【问题描述】:

我有一个 ruby​​ 套接字客户端连接到将随时关闭连接的服务器。 这是我的代码:

@conn = TCPSocket.new address[0], address[1]
while xml = @conn.recv(4096)
  // do something
end

如何在此处检测套接字关闭?

【问题讨论】:

【参考方案1】:

您可能已经为自己回答了这个问题,但为了记录......

recv 方法阻塞,直到至少有一个字节可用,或者套接字关闭。因此,您可以循环直到 recv 返回空字符串:

@conn = TCPSocket.new address[0], address[1]
while true
  xml = @conn.recv(4096)
  break if xml.empty?
  // do something
end

【讨论】:

以上是关于Ruby在recv时检测套接字关闭的主要内容,如果未能解决你的问题,请参考以下文章

如果达到超时,gen_tcp:recv/3 是不是会关闭套接字?

C++ 套接字 recv() 系统调用返回 -1

检测非阻塞套接字上的关闭连接

C 套接字可以在没有客户端关闭连接的情况下接收 0 个字节吗?

远程主机终止后,Recv() 调用挂起

在套接字库中调用 recv 时,我的 recv 缓冲区应该有多大