Consistenty - `IOError` vs `EBADF`?
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 52/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 活跃
- 技术栈
- ruby
- 领域
- networking, security
调研方向
首先使用 Socket.pair 和 OpenSSL::SSL::SSLSocket 运行提供的 Ruby 重现代码,并将 close 后的行为与普通 IO 进行比较。调查两种 sync_close 设置,并将 done 定义为 close-then-read 产生一致的错误行为且不会挂起。
由索引模型根据 Issue 内容生成。
描述
SSLSocket error conditions are not consistent with IO.
io.closefollowed byio.readcan result inEBADFrather thanIOError.- Without
sync_close,io.closefollowed byio.readwill hang. Even if the underlying IO is not closed, I don't think theSSLSocketinstance should continue to work after being closed?
Reproduction:
#!/usr/bin/env ruby
require 'bundler/inline'
gemfile do
source 'https://rubygems.org'
gem 'localhost'
end
require 'socket'
require 'openssl'
require 'localhost'
def read_after_close(io)
io.close
io.read
end
begin
client, server = Socket.pair(:UNIX, :STREAM)
read_after_close(client)
rescue => error
$stderr.puts error.full_message
end
begin
authority = Localhost::Authority.fetch
client, server = Socket.pair(:UNIX, :STREAM)
ssl_server = OpenSSL::SSL::SSLSocket.new(server, authority.server_context)
ssl_server.sync_close = true
ssl_client = OpenSSL::SSL::SSLSocket.new(client, authority.client_context)
ssl_client.sync_close = true # If this is not set, `io.read` above will hang which is also a bit odd.
Thread.new{ssl_server.accept}
ssl_client.connect
read_after_close(ssl_client)
rescue => error
$stderr.puts error.full_message
end
Is this something we can improve?
- 主要语言
- C
- 星标
- 276
- 派生
- 200
- 平均合并
- 15 小时 35 分钟
- 30 天内合并 PR
- 7
环境准备
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
ruby/openssl 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 1 天内回复
-
难度 4/5 3-5 天 新手友好度 48/100
维护者通常 1 天内回复
-
难度 5/5 一周以上 新手友好度 35/100
维护者通常 1 天内回复
-
难度 4/5 3-5 天 新手友好度 35/100
维护者通常 1 天内回复
-
难度 3/5 1-2 天 新手友好度 45/100
维护者通常 1 天内回复
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 84/100
维护者通常 1 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 68/100
fastfetch-cli/fastfetch#2628 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
FujiNetWIFI/fujinet-firmware#1736 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 68/100
维护者通常 3 天内回复
-
难度 2/5 1-3 小时 新手友好度 86/100