ConnectionTimeout 与 SocketTimeout

我用的图书馆出了点问题。可能是图书馆,也可能是我用错了!

基本上,当我这样做时(以毫秒为单位的超时)

_ignitedHttp.setConnectionTimeout(1);  // v short
_ignitedHttp.setSocketTimeout(60000);  // 60 seconds

没有生成超时异常,它工作正常,但是,当我执行以下操作时,

_ignitedHttp.setConnectionTimeout(60000);  // 60 seconds
_ignitedHttp.setSocketTimeout(1);          // v short

我得到一个 Socket 异常。

因此,我的问题是为什么不能模拟连接异常?我是否误解了套接字和连接超时之间的区别?该库是 给你(尚未正式发布)。

185106 次浏览

连接超时仅在启动 TCP 连接时发生。如果远程计算机没有应答,通常会发生这种情况。这意味着服务器已经关闭,您使用了错误的 IP/DNS 名称,错误的端口或到服务器的网络连接关闭。

套接字超时专门用于监视连续传入的数据流。如果数据流在指定的超时时间内中断,则该连接被视为停止/中断。当然,这只适用于始终接收数据的连接。

通过将套接字超时设置为1,这将需要每毫秒接收一次新数据(假设您明智地读取了数据块,并且该块足够大) !

如果传入的流停止超过一毫秒,那么您就会遇到超时。

连接超时是程序愿意等待建立到另一个进程的连接的最长时间。此时您不会获取或发布任何应用程序数据,只是建立连接本身。

套接字超时是等待单个数据包时的超时值。常见的误解是套接字超时是接收完整响应的超时。因此,如果套接字超时为1秒,并且响应由3个 IP 数据包组成,其中每个响应数据包需要0.9秒才能到达,总响应时间为2.7秒,那么就没有超时。