java套接字超时行为

时间:2013-03-12 13:22:58

标签: java sockets timeout

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

1 个答案:

答案 0 :(得分:3)

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

  

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

对于被动对等体,由于对等体未调用read,因此不会引发超时。但是,如果它确实进行了读取调用,则调用必须在soTimeout到期之前返回数据,否则将引发SocketTimeoutException。