套接字的连接和读取超时有什么区别?
2022-08-31 05:59:54
3 个问题:
套接字的连接和读取超时有什么区别?
设置为“无穷大”的连接超时是什么意思?在什么情况下它可以保持在不定式循环中?什么会触发无穷环路死亡?
设置为“无穷大”的读取超时是什么意思?在什么情况下它可以保持在不定式循环中?什么会触发无穷环路死亡?
3 个问题:
套接字的连接和读取超时有什么区别?
设置为“无穷大”的连接超时是什么意思?在什么情况下它可以保持在不定式循环中?什么会触发无穷环路死亡?
设置为“无穷大”的读取超时是什么意思?在什么情况下它可以保持在不定式循环中?什么会触发无穷环路死亡?
- 套接字的连接和读取超时有什么区别?
连接超时是建立初始连接的超时;即完成 TCP 连接握手。读取超时是等待读取数据1 时的超时。如果服务器(或网络)在客户端进行套接字调用后几秒钟<超时>秒内无法传递任何数据,则会引发读取超时错误。read
- 设置为“无穷大”的连接超时是什么意思?在什么情况下它可以保持在不定式循环中?什么会触发无穷环路死亡?
这意味着连接尝试可能会永远阻塞。没有无限循环,但连接尝试可以通过另一个线程关闭套接字来解除阻止。(一个电话也可能做这个把戏...不确定。Thread.interrupt()
- 设置为“无穷大”的读取超时是什么意思?在什么情况下它可以保持在无限循环中?什么可以触发无限循环结束?
这意味着对套接字流的调用可能会永远阻塞。再一次没有无限循环,但可以通过调用,关闭套接字以及(当然)另一端发送数据或关闭连接来解除阻止。read
read
Thread.interrupt()
1 - 它不是...正如一位评论者所认为的那样...套接字可以打开或空闲多长时间的超时。
这些是 JVM 为 TCP 连接建立和等待从套接字读取数据而强制实施的超时值。
如果该值设置为无穷大,则不会永远等待。它只是意味着JVM没有超时,操作系统将负责所有超时。但是,操作系统上的超时可能真的很长。在一些缓慢的网络上,我看到超时长达6分钟。
即使为 socket 设置了超时值,如果本机代码中发生超时,它也可能无法正常工作。我们可以通过连接到被防火墙阻止的主机或拔下交换机上的电缆在Linux上重现问题。
处理 TCP 超时的唯一安全方法是在不同的线程中运行连接代码,并在线程花费太长时间时中断该线程。