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

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

公共无效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个字节为止。

以上是 setSoTimeout的功能是什么以及如何工作? 的全部内容, 来源链接: utcz.com/qa/429006.html

回到顶部