3个问题:
套接字的 连接 和 读取 超时有什么区别?
连接 超时设置为“无限”是什么意思?在什么情况下它可以保持在不定式循环中?什么可以触发无限循环死亡?
读取 超时设置为“无限”是什么意思?在什么情况下它可以保持在不定式循环中?什么可以触发无限循环死亡?
套接字的连接和读取超时有什么区别?
连接超时是建立初始连接的超时时间;即完成TCP连接握手。读取超时是等待读取数据1的超时。如果服务器(或网络)在客户端进行套接字调用后的 秒内未能传递任何数据read,则会引发读取超时错误。
read
连接超时设置为“无限”是什么意思?在什么情况下它可以保持在不定式循环中?什么可以触发无限循环死亡?
这意味着连接尝试可能会永远阻塞。没有无限循环,但连接尝试可以被另一个关闭套接字的线程解除阻塞。(Thread.interrupt()打电话也可以解决问题……不确定。)
Thread.interrupt()
读取超时设置为“无限”是什么意思?什么情况下可以无限循环?什么可以触发无限循环结束?
这意味着read对套接字流的调用可能会永远阻塞。再一次没有无限循环,但read可以通过Thread.interrupt()调用、关闭套接字以及(当然)另一端发送数据或关闭连接来解除阻塞。
1 - 它不是......正如一位评论者所认为的......套接字可以打开或空闲多长时间的超时。