java - 在接收()之后直接关闭()SSL套接字:不安全?
问题描述
在最后一次接收()之后直接关闭()套接字是否明智/安全?
我之所以问,是因为我检查了套接字发送端发生的情况,如果我使用的是 Java 和 TLS,那里的代码是
/**
* Write the data out, NOW.
*/
@Override
public synchronized void write(byte[] b, int off, int len)
throws IOException {
if (b == null) {
throw new NullPointerException();
} else if (off < 0 || len < 0 || len > b.length - off) {
throw new IndexOutOfBoundsException();
} else if (len == 0) {
return;
}
// check if the Socket is invalid (error or closed)
socket.checkWrite();
// Delegate the writing to the underlying socket.
try {
socket.writeRecord(b, off, len);
socket.checkWrite();
} catch (Exception e) {
// shutdown and rethrow (wrapped) exception as appropriate
socket.handleException(e);
}
}
这意味着,在第二次调用 时,Java在发送最后一块数据后socket.checkWrite();
检查套接字是否可写。然后可以进行竞赛,在接收端我在收到最后一个块之后关闭,但在发送端进行最后一次检查之前,我最终在发送端被抛出。SocketException
我在上一段中描述的似乎是在https://issues.apache.org/jira/browse/AMQ-6956中实际发生在我身上的事情。第二次检查时的套接字处于状态cs_SENT_CLOSE = 5
,我得到SocketException
.
解决方案
推荐阅读
- c# - 无需用户交互即可登录 Google 服务
- java - WebView 显示
- python - 将标准偏差添加到熊猫 groupby 对象的平均值
- c# - 如何在不将整个项目导入 bin 的情况下使用另一个项目的 Project.Properties?
- shell - 以空格分隔的读取 Shell 脚本选项
- spring-boot-test - 如何修复无法找到 meta.properties 的嵌入式 kafka 的错误
- javascript - 如何将带有图像和所有样式的 HTML 页面转换为 PDF 然后下载?
- python - 浏览文件并在不同文件中使用其路径
- c# - 尝试创建表并插入数据库
- r - 根据另一列值修改列值