我正在使用的库有问题。可能是图书馆,也可能是我用错了!
基本上,当我这样做时(超时以毫秒为单位)
_ignitedHttp.setConnectionTimeout(1); // v short
_ignitedHttp.setSocketTimeout(60000); // 60 seconds
没有产生超时异常并且工作正常,但是,当我执行以下操作时,
_ignitedHttp.setConnectionTimeout(60000); // 60 seconds
_ignitedHttp.setSocketTimeout(1); // v short
我得到一个套接字异常。
那么,我的问题是为什么我不能模拟连接异常?我是否误解了套接字和连接超时之间的区别?图书馆是 here (尚未正式发布)。
最佳答案
连接超时仅在启动 TCP 连接时发生。如果远程机器没有应答,通常会发生这种情况。这意味着服务器已关闭,您使用了错误的 IP/DNS 名称、错误的端口或与服务器的网络连接已关闭。
套接字超时专门用于监控连续传入的数据流。如果数据流在指定的超时时间内被中断,则连接被视为停止/断开。当然,这只适用于一直接收数据的连接。
通过将套接字超时设置为 1,这将要求每毫秒接收一次新数据(假设您明智地读取数据 block 并且 block 足够大)!
如果只有传入的流停止超过一毫秒,您将遇到超时。
关于java - ConnectionTimeout 与 SocketTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7360520/