我用ruby制作了一个TCP服务器。版本如下。
代码如下。
context = OpenSSL::SSL::SSLContext.new()
context.cert = OpenSSL::X509::Certificate.new(File.read(CERT_PATH))
context.key = OpenSSL::PKey::RSA.new(File.read(KEY_PATH))
context.ca_file = CERT_PATH
context.ssl_version = :TLSv1_2
tcp_server = TCPServer.new(PORT)
@ssl_server = OpenSSL::SSL::SSLServer.new(tcp_server, context)
loop do
Thread.abort_on_exception = true
begin
Thread.start(@ssl_server.accept) do |socket|
do_something
socket.close
end
rescue => e
ERROR_LOGGER.error e
exit
end
end
基本上它工作正常,但执行@ssl_server.accept
时偶尔会出现以下错误。
E, [2018-03-02T11:06:10.142500 #10116] ERROR -- : SSL_accept SYSCALL returned=5 errno=0 state=SSLv3 read client key exchange A (OpenSSL::SSL::SSLError)
我想知道谁正在访问此错误。因此,我想在发生错误时显示访问源的IP地址。请告诉我谁知道怎么做。谢谢!
答案 0 :(得分:0)
Socket#accept
返回套接字描述符和addr_info
,因此您可以执行以下操作:
loop do
Thread.abort_on_exception = true
begin
_fd, @addr_info = @ssl_server.accept
Thread.start(_fd) do |socket|
do_something
socket.close
end
rescue => e
ERROR_LOGGER.error e
ERROR_LOGGER.info "AddrInfo: #{@addr_info}"
exit
end
end