java - 为什么 SSLSocket 写入选项没有超时?

标签 java sockets ssl blocking sslsocketfactory

在Java中,对SSLSocket API的写操作是阻塞的,写操作也不支持超时。

有人可以解释一下吗?

  1. 会不会出现写操作永远阻塞线程的情况?我上网查了一下,好像有永远封禁的可能。
  2. 如何为写操作添加超时?

我的应用程序创建了两个线程,一个用于读取,一个用于写入。

最佳答案

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”。阅读链接了解详细信息。)

备选方案包括:

  1. 使用定时器实现超时,如果定时器超时则中断线程或关闭套接字。请注意,中断和关闭都会使您处于需要放弃套接字的状态。

  2. 使用 NIO 选择器和非阻塞 I/O。

关于java - 为什么 SSLSocket 写入选项没有超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50469335/

相关文章:

java - 在 OpenGL 中缩放纹理

javascript - 使用 Socket.IO 进行授权和握手

php - curl 错误 60 : SSL certificate in Laravel 5. 3

.net - 如何在 .Net 中强制使用 TLS 而不是 SSL

java - 如何在 java 中解析 getDate() 返回的值?

java - 哈希表使用多少内存?

java - 看不懂这个Map.entry参数

java - 对使用 UDP 套接字的代码进行单元测试的推荐方法是什么?

javascript - Totaljs websocket 模块与 socket.io

ssl - 从 HTTP 重定向到 HTTPS 连接后,jboss 5.1 不工作