- java/
- Java 为什么SSLSocket写入选项没有超时?
Java 为什么SSLSocket写入选项没有超时?
Java 为什么SSLSocket写入选项没有超时?,java,sockets,ssl,blocking,sslsocketfactory,Java,Sockets,Ssl,Blocking,Sslsocketfactory,在Java中,SSLSocket API上的写入操作是阻塞的,并且写入操作也不支持超时
有人能解释一下吗
是否存在写入操作会永远阻塞线程的情况?我在网上查了一下,似乎有可能永远封锁
如何为写入操作添加超时
我的应用程序创建了两个线程,一个用于读取,一个用于写入
1-是否存在写入操作会永久阻塞线程的情况?我在网上查了一下,似乎有可能永远封锁
是的,可以。虽然并非永远如此:-)
2-有人能建议我们如何为写入操作添加超时吗
您不能用Java的套接字/SSL套接字实现,等等。Java套接字支持连接超时和
在Java中,SSLSocket API上的写入操作是阻塞的,并且写入操作也不支持超时
有人能解释一下吗
是否存在写入操作会永远阻塞线程的情况?我在网上查了一下,似乎有可能永远封锁
如何为写入操作添加超时
我的应用程序创建了两个线程,一个用于读取,一个用于写入
1-是否存在写入操作会永久阻塞线程的情况?我在网上查了一下,似乎有可能永远封锁
是的,可以。虽然并非永远如此:-)
2-有人能建议我们如何为写入操作添加超时吗
您不能用Java的套接字/SSL套接字实现,等等。Java套接字支持连接超时和读取超时,但不支持写入超时
另见:
(为什么?早在1997年,bug ID中就要求套接字写入超时,但bug以“WontFix”状态关闭。有关详细信息,请阅读链接。)
备选方案包括:
使用计时器实现超时,如果计时器关闭,则中断线程或关闭套接字。请注意,中断和关闭都会使您处于需要放弃套接字的状态
使用NIO选择器和非阻塞I/O
1-是否存在写入操作会永久阻塞线程的情况?我在网上查了一下,似乎有可能永远封锁
是的,可以。虽然并非永远如此:-)
2-有人能建议我们如何为写入操作添加超时吗
您不能用Java的套接字/SSL套接字实现,等等。Java套接字支持连接超时和读取超时,但不支持写入超时
另见:
(为什么?早在1997年,bug ID中就要求套接字写入超时,但bug以“WontFix”状态关闭。有关详细信息,请阅读链接。)
备选方案包括:
使用计时器实现超时,如果计时器关闭,则中断线程或关闭套接字。请注意,中断和关闭都会使您处于需要放弃套接字的状态
使用NIO选择器和非阻塞I/O
因为:
如果真的需要这样的工具,那么它就需要在TCP级别,而不仅仅是SSL级别
它在TCP级别上没有API,我的意思不仅仅是在Java中:它也没有C级别的API,除了在几个平台上
如果在SSL级别添加,写入超时事件将使连接处于不确定状态,这意味着连接必须关闭,因为您不知道传输了多少数据,因此无法在SSL级别保持完整性
要解决您的具体问题:
是否存在写入操作会永远阻塞线程的情况?我在网上查了一下,似乎有可能永远封锁
对。我见过一个应用程序在这种情况下被阻塞了好几天。正如@StephenC正确地说,虽然不是永远。我们还没活那么久
如何为写入操作添加超时
您可以使用非阻塞I/O和选择器在TCP级别执行此操作,并且可以在其上分层SSLEngine
,以获得SSL,但这是一个繁琐且极易出错的操作,许多人都尝试过:很少有人成功。不适合胆小的人。因为:
如果真的需要这样的工具,那么它就需要在TCP级别,而不仅仅是SSL级别
它在TCP级别上没有API,我的意思不仅仅是在Java中:它也没有C级别的API,除了在几个平台上
如果在SSL级别添加,写入超时事件将使连接处于不确定状态,这意味着连接必须关闭,因为您不知道传输了多少数据,因此无法在SSL级别保持完整性
要解决您的具体问题:
是否存在写入操作会永远阻塞线程的情况?我在网上查了一下,似乎有可能永远封锁
对。我见过一个应用程序在这种情况下被阻塞了好几天。正如@StephenC正确地说,虽然不是永远。我们还没活那么久
如何为写入操作添加超时
您可以使用非阻塞I/O和选择器在TCP级别执行此操作,并且可以在其上分层SSLEngine
,以获得SSL,但这是一个繁琐且极易出错的操作,许多人都尝试过:很少有人成功。不适合胆小的人