2

如果我在 java 套接字上设置 soTimeout,那么在主动对等点与被动对等点的情况下会发生什么行为。例如,如果我有一个 readtimeout 值 1 分钟并且有一个文件传输并且需要 5 分钟,它会不会得到 readtimeout 异常?对我来说,连接挂起时有必要获得超时异常。

4

1 回答 1

3

soTimeout设置显式影响从套接字输入流读取的操作。您可以将其视为允许调用者在读取操作上定义一个定时块。来自 Javadoc 的setSoTimeout

使用指定的超时启用/禁用 SO_TIMEOUT,以毫秒为单位。 将此选项设置为非零超时,与此 Socket 关联的 InputStream 上的 read() 调用将仅阻塞此时间量。如果超时到期,则会引发 java.net.SocketTimeoutException,尽管 Socket 仍然有效。

在被动对等体的情况下,不会仅仅因为对等体没有调用而引发超时read。但是,如果确实进行了读取调用,则该调用必须在soTimeout过期之前返回数据,否则将引发 SocketTimeoutException。

于 2013-03-12T13:53:32.757 回答