[英]Java Socket:why is there is no “write timeout” for the socket
不会有多大用处。
通常,TCP 发送与应用程序是异步的。 send()
所做的只是将数据放入套接字发送缓冲区。 然后它返回,同时发送缓冲区被异步清空到网络。 所以没有什么可以超时的。 并且没有超时并不表示数据已发送到对等方。
send()
在发送缓冲区已满时阻塞,并且可以在其上实现超时,实际上您可以使用select()
在非阻塞模式下自己做到这一点,但问题是超时可能是当前发送或前一个发送。 因此,提供超时会相当混乱。 相反,当所有 TCP 发送计时器在内部超时时传递的是连接重置。
我认为TCP协议中有写超时的概念。
确实有,但那是在 TCP 异步清空套接字发送缓冲区的级别。 它不受应用程序控制。
您可以先尝试连接...如果连接失败捕获异常
InetSocketAddress sockAdr = new InetSocketAddress(serveradres, 2222);
Socket newsok = new Socket();
int timeout = 2000;
newsok.connect(sockAdr, timeout);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.