在Java中,对SSLSocket API的写操作是阻塞的,写操作也不支持超时。
有人可以解释一下吗?
- 会不会出现写操作永远阻塞线程的情况?我上网查了一下,好像有永远封禁的可能。
- 如何为写操作添加超时?
我的应用程序创建了两个线程,一个用于读取,一个用于写入。
最佳答案
1- Can there be a situation where write operation can block a thread forever? I checked on Internet and it seems that there is a possibility of blocking forever.
是的,可以。虽然不是字面上的永远:-)
2- Can someone please suggest how we can add timeout for write operation?
您不能使用 Java 的套接字/SSL 套接字实现,等等。 Java 套接字支持连接超时和读取超时,但不支持写入超时。
另请参阅:How can I set Socket write timout in java?
(为什么?在 1997 年的错误 ID JDK-4031100 中请求套接字写入超时,但该错误已关闭,状态为“WontFix”。阅读链接了解详细信息。)
备选方案包括:
使用定时器实现超时,如果定时器超时则中断线程或关闭套接字。请注意,中断和关闭都会使您处于需要放弃套接字的状态。
使用 NIO 选择器和非阻塞 I/O。
关于java - 为什么 SSLSocket 写入选项没有超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50469335/