当前位置: 首页 > 面试题库 >

setSoTimeout的功能是什么以及如何工作?

璩和璧
2023-03-14
问题内容

我正在尝试自己学习Socket。我对Oracle网站上的文字感到有些困惑。我对此有一些疑问。在此先感谢您的明确解释。

setSoTimeout

公共无效setSoTimeout(int超时)引发SocketException

以指定的超时时间启用/禁用SO_TIMEOUT,以毫秒为单位。将此选项设置为非零超时后,与此套接字关联的read()调用InputStream将仅在此时间量内阻塞。如果超时到期,java.net.SocketTimeoutException则尽管Socket仍然有效,但将引发a
。必须先启用该选项,然后才能执行阻止操作。超时必须大于0。零超时被解释为无限超时。

  1. 什么是SO_TIMEOUT?
  2. 套接字是连接的端点。如果我说
    mySocket.setSoTimeout(2000);
    

这是否意味着我要在2000毫秒内阻止从服务器/客户端为此套接字读取任何输入,并且在此时间之后套接字已准备好读取数据?

  1. 超时到期是什么意思?

  2. 在阻止操作之前必须启用哪些选项?

  3. 无限超时意味着套接字不再读取?


问题答案:

该JavaDoc的解释非常好:

通过将此选项设置为非零超时,与此套接字关联的InputStream上的read()调用将仅在此时间量内阻塞。如果超时到期,则尽管Socket仍然有效,但将引发java.net.SocketTimeoutException。必须先启用该选项,然后才能执行阻止操作。超时必须大于0。零超时被解释为无限超时。

SO_TIMEOUTread()通话将被阻止的超时时间。如果达到超时,将抛出java.net.SocketTimeoutException。如果要永久阻止,请将此选项设置为零(默认值),则read()调用将一直阻止,直到可以读取至少1个字节为止。



 类似资料:
  • 问题内容: 经常出现在Python模块中。即使阅读了Python的文档,我也不明白它的用途以及使用时间/方式。 有人可以举例说明吗? 关于我收到的基本用法的一些答案似乎是正确的。 但是,我需要了解有关工作原理的另一件事: 对我来说,最令人困惑的概念是当前的python版本如何包含未来版本的功能,以及如何使用当前版本的Python成功地编译使用未来版本的功能的程序。 我猜想当前版本包含了将来的潜在功

  • 问题内容: 我参与开发一个Java项目,该项目使用一些C ++组件,因此我需要Jacob.dll。(在Windows 7上) 无论我把Jacob.dll放在哪里,我都在不断获取。 我在寻找可能的决定,而到目前为止尚未尝试的决定是设置LD_LIBRARY_PATH变量,指向.dll文件。 我经验不足,不熟悉该变量的含义和用法-您能帮我吗? 问题答案: 通常,您必须在JVM的命令行上进行设置:

  • JavaScript一直让我惊讶,这是另一个例子。我只是遇到了一些我起初不理解的代码。所以我调试了它,得出了这个结论: 现在,如果被定义为字符串类型的成员,这一定是显而易见的,但最初对我来说没有意义。 不管怎样, > 这是否因为是“a”的成员而起作用?还是幕后还有别的事 我正在阅读的代码具有如下功能: 对任何对象调用任何方法都是一种通用函数。但这是否意味着指定的方法已经是指定对象的隐式成员? 我确

  • 问题内容: 我们经常看到如下: 有什么功能? 问题答案: DOCTYPE的最主要用途是在Quirks模式和Standards模式渲染之间切换浏览器。 出现此功能的原因是IE的旧版本中的“残破”渲染。人们认识到,如果Microsoft仅“修复”了IE呈现引擎,则许多现有站点将无法正确呈现。因此,它的工作方式是,如果您在页面中完全放置了_任何_有效的DOCTYPE声明,则假定您知道自己在做什么,并且浏

  • 请解释Spring中关于异常的以下内容: 这是什么意思? 在什么条件下抛出? 如何预防? 这篇文章是关于使用Spring的应用程序中出现的全面问答。

  • 我有一个用Eclipse编写的Java代码库,我正试图在IntelliJ中使用它。代码库由大约20个Java包组成,这些包作为单独的项目并排构建。(大约有二十个目录,每个目录包含一个和文件。)他们互相依赖。想必Eclipse中的一切都构建得很好。 我让IntelliJ从Eclipse构建格式导入了这些。除了显示许多项目对有一个未解析的依赖关系之外,它基本上都起作用了。这似乎来自文件中的以下条目: