151

我正在使用的库有问题。可能是图书馆,也可能是我用错了!

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

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

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

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

我得到一个套接字异常。

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

4

2 回答 2

260

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

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

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

如果只有传入流停止超过一毫秒,您将遇到超时。

于 2011-09-09T11:24:20.390 回答
111

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

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

于 2015-11-30T21:14:31.877 回答