如果我在java套接字上设置soTimeout,那么在活动对等体和被动对等体的情况下会是什么行为。例如,如果我有一个读取超时值1分钟并且有一个文件传输并且需要5分钟它会得到readtimeout异常吗?对我来说,当连接挂起时必须获得超时异常。
答案 0 :(得分:3)
soTimeout
设置显式影响从套接字输入流中读取的操作。您可以将其视为允许调用者在读取操作上定义定时块。来自setSoTimeout
的Javadoc:
使用指定的超时启用/禁用SO_TIMEOUT,以毫秒为单位。 将此选项设置为非零超时,对...执行read()调用 与此Socket关联的InputStream将仅阻止此操作 时间量。如果超时到期,a 引发了java.net.SocketTimeoutException,尽管Socket仍然存在 有效的。
对于被动对等体,由于对等体未调用read
,因此不会引发超时。但是,如果它确实进行了读取调用,则调用必须在soTimeout
到期之前返回数据,否则将引发SocketTimeoutException。