ConnectionTimeout与SocketTimeout
林与我正在使用的图书馆有问题,它可能是图书馆,或者它可能是我用它错了!
基本上当我这样做(超时以毫秒为单位)
_ignitedHttp.setConnectionTimeout(1); // v short _ignitedHttp.setSocketTimeout(60000); // 60 seconds
没有超时exception生成工作正常,但是,当我这样做:
_ignitedHttp.setConnectionTimeout(60000); // 60 seconds _ignitedHttp.setSocketTimeout(1); // v short
我得到一个套接字exception。
所以我的问题是为什么我不能模拟连接exception? 我误解了套接字和连接超时之间的区别吗? 图书馆在这里 (尚未正式实现)。
连接超时仅在启动TCP连接时发生。 这通常发生在远程机器没有应答的情况下。 这意味着服务器已closures,您使用错误的IP / DNS名称或服务器的networking连接已closures。
套接字超时专用于监视连续传入的数据stream。 如果数据stream在指定的超时时间内中断,连接将被视为停止/中断。 当然,这只适用于所有时间收到数据的连接。
通过将套接字超时设置为1,这将需要接收每毫秒的新数据(假设您读取数据块并且块足够大)!
如果只有传入的数据stream停止超过一毫秒,则表示正在运行超时。
连接超时是程序愿意等待build立到另一个进程的连接的最长时间。 您目前没有获取或发布任何应用程序数据,只是build立连接。
套接字超时是等待单个数据包时的超时时间。 这是一个常见的误解,套接字超时是接收完整响应的超时。 所以,如果套接字超时为1秒,响应包含3个IP数据包,每个响应数据包需要0.9秒才能到达,总响应时间为2.7秒,则不会有超时。