有传递给connect方法的连接超时值,还有使用setSoTimeout方法设置的读取超时值。我想知道为什么没有设置“写入超时”的方法?我认为TCP协议中有写超时的概念。
不会有太大用处。
一般来说,TCP 发送与应用程序是异步的。所做的send()
就是将数据放入套接字发送缓冲区。然后它返回,同时发送缓冲区异步清空到网络。所以没有什么可以超时的。并且没有超时并不表示数据已经发送到对端。
send()
当发送缓冲区已满时会阻塞,并且可以对此实现超时,实际上您可以在非阻塞模式下自己执行此操作select()
,但问题是超时的可能是当前发送或前一篇。因此提供超时会相当混乱。相反,当所有 TCP 发送计时器内部超时时,会发送连接重置。
我认为TCP协议中有写入超时的概念。
确实有,但那是在 TCP 异步清空套接字发送缓冲区的级别。它不受应用程序控制。