java - 套接字的连接和读取超时有什么区别?

标签 java sockets timeout connection

3 个问题:

  1. 套接字的连接读取超时有什么区别?

  2. 连接超时设置为“无限”是什么意思?在什么情况下它可以保持在不定式循环中?什么会触发无限循环死亡?

  3. read 超时设置为“无限”是什么意思?在什么情况下它可以保持在不定式循环中?什么会触发无限循环死亡?

最佳答案

  1. What is the difference between connection and read timeout for sockets?

连接超时是建立初始连接的超时时间;即完成 TCP 连接握手。读取超时是等待读取数据的超时时间1。如果在客户端调用套接字 read 后服务器(或网络)未能传递任何数据 秒,则会引发读取超时错误。

  1. What does connection timeout set to "infinity" mean? In what situation can it remain in an infinitive loop? and what can trigger that the infinity-loop dies?

这意味着连接尝试可能永远阻塞。没有无限循环,但连接尝试可以被另一个关闭套接字的线程解除阻塞。 (Thread.interrupt() 调用也可以解决问题……不确定。)

  1. What does read timeout set to "infinity" mean? In what situation can it remain in an infinite loop? What can trigger that the infinite loop to end?

这意味着对套接字流上的 read 的调用可能会永远阻塞。再次没有无限循环,但 read 可以通过 Thread.interrupt() 调用解除阻塞,关闭套接字,(当然)另一端发送数据或关闭连接。


1 - 这不是......正如一位评论者所认为的......套接字可以打开或空闲多长时间的超时。

关于java - 套接字的连接和读取超时有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3069382/

相关文章:

java - 如何以编程方式发现 Spring Boot 使用的 JPA 实现和 SQL 方言?

Java 原始类型提升困惑

jquery - Fancybox 打开 href onclick

java - 如何在java中实现TCP server,在cpp中实现TCP Client来传输字符串

Java - 检查字符串中的最后一个字符是否为数字

java - WebService 项目 Java on Gradle 项目

java - 如何测量互联网带宽

c - 如何绕过 "foreground lock timeout"激活我的窗口?

Java Socket.setSoTimeout() 在连接时不会超时

php - 为什么 curl 会忽略 CURLOPT_TIMEOUT_MS(但尊重 CURLOPT_TIMEOUT)?