连接超时与套接字超时

2022-08-31 07:21:59

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

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

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

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

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

我收到一个套接字异常。

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


答案 1

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

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

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

如果只有传入的流停止超过一毫秒,则会出现超时。


答案 2

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

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


推荐